.TH ATOF 2
.SH NAME
atof, atoi, atol, charstod, strtod, strtol, strtoul \- convert text to numbers
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.nf
.ta \w'\fLdouble 'u
.B
double	atof(char *nptr)
.PP
.B
int	atoi(char *nptr)
.PP
.B
long	atol(char *nptr)
.PP
.B
double	charstod(int (*f)(void *), void *a)
.PP
.B
double	strtod(char *nptr, char **rptr)
.PP
.B
long	strtol(char *nptr, char **rptr, int base)
.PP
.B
ulong	strtoul(char *nptr, char **rptr, int base)
.PP
.B
/* Alef only */
.PP
.B
int	strtoi(byte *nptr, byte **rptr, int base)
.PP
.B
uint	strtoui(byte *nptr, byte **rptr, int base)
.PP
.B
float	strtof(byte *nptr, byte **rptr);
.fi
.SH DESCRIPTION
.IR Atof ,
.IR atoi ,
and
.I atol
convert a string pointed to by
.I nptr
to floating, integer, and long integer
representation respectively.
The first unrecognized character ends the string.
Leading C escapes are understood, as in
.I strtol
with
.I base
zero.
.PP
.I Atof
recognizes an optional string of tabs and spaces,
then an optional sign, then
a string of digits optionally containing a decimal
point, then an optional 
.L e
or 
.L E
followed
by an optionally signed integer.
.PP
.I Atoi
and
.I atol
recognize an optional string of tabs and spaces,
then an optional sign, then a string of
decimal digits.
.PP
.IR Strtod ,
.IR strtol ,
and
.I strtoul
behave similarly to 
.I atof
and
.I atol
and, if
.I rptr
is not zero, set
.I *rptr
to point to the input character
immediately after the string converted.
.PP
.I Strtol
and
.I strtoul
interpret the digit string in the specified
.IR base ,
from 2 to 36,
each digit being less than the base.
Digits with value over 9 are represented by letters,
a-z or A-Z.
If
.I base
is 0, the input is interpreted as an integral constant in
the style of C (with no suffixed type indicators):
numbers are octal if they begin with
.LR 0 ,
hexadecimal if they begin with
.L 0x
or
.LR 0X ,
otherwise decimal.
.I Strtoul
does not recognize signs.
.PP
.I Charstod
interprets floating point numbers like
.IR atof ,
but it gets successive characters by calling
.BR (*\fIf\fP)(a) .
The last call to
.I f
terminates the scan, so it must have returned a character that
is not a legal continuation of a number.
Therefore, it may be necessary to back up the input stream one character
after calling
.IR charstod .
.SS Alef
The routines
.I strtol
and
.I strtoul
are renamed
.I strtoi
and
.I strtoui
and return type
.B int
and
.BR uint .
There is no
.I charstod
or
.IR atof .
Instead,
.I strtof
is like a floating-point base 10
.IR strtoi .
.SH SOURCE
.B /sys/src/libc/port
.SH SEE ALSO
.IR fscanf (2)
.SH DIAGNOSTICS
Zero is returned if the beginning of the input string is not
interpretable as a number; even in this case,
.I rptr
will be updated.
.br
These routines set
.IR errstr .
.SH BUGS
.I Atoi
and
.I atol
accept octal and hexadecimal numbers in the style of C,
contrary to the ANSI specification.
