aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libj2_j2i_add_j2i.35
-rw-r--r--libj2_j2i_cmp_j2i.33
-rw-r--r--libj2_j2i_divmod_j2i.3188
-rw-r--r--libj2_j2i_divmod_j2i.c18
-rw-r--r--libj2_j2i_eq_j2i.33
-rw-r--r--libj2_j2i_ge_j2i.33
-rw-r--r--libj2_j2i_gt_j2i.33
-rw-r--r--libj2_j2i_le_j2i.33
-rw-r--r--libj2_j2i_lsh.315
-rw-r--r--libj2_j2i_lt_j2i.33
-rw-r--r--libj2_j2i_max_j2i.31
-rw-r--r--libj2_j2i_min_j2i.31
-rw-r--r--libj2_j2i_mod_j2i.394
-rw-r--r--libj2_j2i_mod_j2i.c12
-rw-r--r--libj2_j2i_mul_j2i.3276
-rw-r--r--libj2_j2i_mul_j2i.c44
-rw-r--r--libj2_j2i_ne_j2i.33
-rw-r--r--libj2_j2i_rsh.315
-rw-r--r--libj2_j2i_sub_j2i.35
-rw-r--r--libj2_j2i_to_str.3107
-rw-r--r--libj2_j2i_to_str.c4
-rw-r--r--libj2_j2u_and_j2u.35
-rw-r--r--libj2_j2u_if_j2u.35
-rw-r--r--libj2_j2u_imply_j2u.35
-rw-r--r--libj2_j2u_nand_j2u.35
-rw-r--r--libj2_j2u_nif_j2u.35
-rw-r--r--libj2_j2u_nimply_j2u.35
-rw-r--r--libj2_j2u_nor_j2u.35
-rw-r--r--libj2_j2u_or_j2u.35
-rw-r--r--libj2_j2u_sub_j2u.34
-rw-r--r--libj2_j2u_to_j2i.375
-rw-r--r--libj2_j2u_to_j2i.c4
-rw-r--r--libj2_j2u_xnor_j2u.35
-rw-r--r--libj2_j2u_xor_j2u.35
-rw-r--r--libj2_max_j2i.33
-rw-r--r--libj2_min_j2i.33
-rw-r--r--libj2_minus_j2i.31
-rw-r--r--libj2_str_to_j2i.34
38 files changed, 831 insertions, 119 deletions
diff --git a/libj2_j2i_add_j2i.3 b/libj2_j2i_add_j2i.3
index 760bb3f..0efda2b 100644
--- a/libj2_j2i_add_j2i.3
+++ b/libj2_j2i_add_j2i.3
@@ -75,7 +75,6 @@ in their name), detect arithmetic overflow.
The result is truncated to the least significant
bits, as many as can be stored, in case of overflow;
that is, modular arithmetics is used.
-
.PP
The arguments are assumed to be
.RI non- NULL .
@@ -133,4 +132,6 @@ functions were added in version 1.1 of
.SH SEE ALSO
.BR libj2 (7),
.BR libj2_j2i_sub_j2i (3),
-.BR libj2_j2u_sub_j2u (3)
+.BR libj2_j2u_sub_j2u (3),
+.BR libj2_j2i_mul_j2i (3),
+.BR libj2_j2i_divmod_j2i (3)
diff --git a/libj2_j2i_cmp_j2i.3 b/libj2_j2i_cmp_j2i.3
index 6da4b5b..2c30909 100644
--- a/libj2_j2i_cmp_j2i.3
+++ b/libj2_j2i_cmp_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_cmp_j2i \- Compare two values
int \fBlibj2_j2i_cmp_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_cmp_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_cmp_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_cmp_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_cmp_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_cmp_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_cmp_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_cmp_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_cmp_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_cmp_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_cmp_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_cmp_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_divmod_j2i.3 b/libj2_j2i_divmod_j2i.3
new file mode 100644
index 0000000..25c8413
--- /dev/null
+++ b/libj2_j2i_divmod_j2i.3
@@ -0,0 +1,188 @@
+.TH LIBJ2_J2I_DIVMOD_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_divmod_j2i \- Calculate quotient and remainder
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+intmax_t \fBlibj2_j2i_divmod_j2i\fP(
+ struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+void \fBlibj2_j2i_divmod_j2i_to_j2i\fP(
+ struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP,
+ struct libj2_j2i *\fIq\fP);
+void \fBlibj2_j2i_divmod_j2i_to_j2i_j2i\fP(
+ const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP,
+ struct libj2_j2i *\fIq\fP, struct libj2_j2i *\fIr\fP);
+
+intmax_t \fBlibj2_j2i_divmod_ji\fP(
+ struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+void \fBlibj2_j2i_divmod_ji_to_j2i\fP(
+ struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP,
+ struct libj2_j2i *\fIq\fP);
+void \fBlibj2_j2i_divmod_ji_to_j2i_j2i\fP(
+ const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP,
+ struct libj2_j2i *\fIq\fP, struct libj2_j2i *\fIr\fP);
+
+uintmax_t \fBlibj2_j2u_divmod_j2u\fP(
+ struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+void \fBlibj2_j2u_divmod_j2u_to_j2u\fP(
+ struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP,
+ struct libj2_j2u *\fIq\fP);
+void \fBlibj2_j2u_divmod_j2u_to_j2u_j2u\fP(
+ const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP,
+ struct libj2_j2u *\fIq\fP, struct libj2_j2u *\fIr\fP);
+
+uintmax_t \fBlibj2_j2u_divmod_ju\fP(
+ struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+void \fBlibj2_j2u_divmod_ju_to_j2u\fP(
+ struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP,
+ struct libj2_j2u *\fIq\fP);
+void \fBlibj2_j2u_divmod_ju_to_j2u_j2u\fP(
+ const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP,
+ struct libj2_j2u *\fIq\fP, struct libj2_j2u *\fIr\fP);
+
+intmax_t \fBlibj2_j2i_rdivmod_j2i\fP(
+ struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP);
+void \fBlibj2_j2i_rdivmod_j2i_to_j2i\fP(
+ struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP,
+ struct libj2_j2i *\fIq\fP);
+
+uintmax_t \fBlibj2_j2u_rdivmod_j2u\fP(
+ struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP);
+void \fBlibj2_j2u_rdivmod_j2u_to_j2u\fP(
+ struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP,
+ struct libj2_j2u *\fIq\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions calculate the
+calculate the quotient between
+.I a
+and
+.IR b ,
+and as a side-effect calculates the remainder
+(for no additional computational cost).
+.PP
+The
+.BR libj2_j2i_divmod_j2i (),
+.BR libj2_j2i_divmod_ji (),
+.BR libj2_j2u_divmod_j2u (),
+and
+.BR libj2_j2u_divmod_ju ()
+functions return the quotient, the remainder
+of the functions store the quotient in
+.IR q .
+.PP
+The
+.BR libj2_j2i_divmod_j2i (),
+.BR libj2_j2i_divmod_j2i_to_j2i (),
+.BR libj2_j2i_divmod_ji (),
+.BR libj2_j2i_divmod_ji_to_j2i (),
+.BR libj2_j2u_divmod_j2u (),
+.BR libj2_j2u_divmod_j2u_to_j2u (),
+.BR libj2_j2u_divmod_ju (),
+and
+.BR libj2_j2u_divmod_ju_to_j2u ()
+functions store the remainder in
+.IR a .
+.PP
+The
+.BR libj2_j2i_rdivmod_j2i ()
+and
+.BR libj2_j2u_rdivmod_j2u ()
+functions store the remainder in
+.IR b .
+.PP
+The
+.BR libj2_j2i_divmod_j2i_to_j2i_j2i (),
+.BR libj2_j2i_divmod_ji_to_j2i_j2i (),
+.BR libj2_j2u_divmod_j2u_to_j2u_j2u (),
+and
+.BR libj2_j2u_divmod_ju_to_j2u_j2u ()
+functions store the remainder in
+.IR r .
+.PP
+If
+.I b
+is -1 and
+.I a
+is the largest negative value that can be
+represented, the computation will overflow
+such that the quotient will be largest negative
+value, rather than the largest positive value
+plus one. For the
+.BR libj2_j2i_divmod_j2i ()
+and
+.BR libj2_j2i_divmod_ji ()
+functions, the quotient will truncate to zero
+in that case.
+.PP
+The quotient is rounded towards zero.
+The remainder is defined such that the
+product of the rounded quotient and the
+divisor is equal to the difference between
+the dividend and the remainder.
+.PP
+The remainder of the functions do not
+return any value.
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_j2i_divmod_j2i ()
+and
+.BR libj2_j2i_divmod_ji ()
+functions return the quotient truncated to an
+.BR intmax_t.
+.PP
+The
+.BR libj2_j2u_divmod_j2u ()
+and
+.BR libj2_j2u_divmod_ju ()
+functions return the quotient truncated to a
+.BR uintmax_t.
+
+.SH ERRORS
+The above listed functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_divmod_j2u (),
+.BR libj2_j2u_divmod_j2u_to_j2u (),
+.BR libj2_j2u_divmod_j2u_to_j2u_j2u (),
+.BR libj2_j2u_divmod_ju (),
+.BR libj2_j2u_divmod_ju_to_j2u (),
+.BR libj2_j2u_divmod_ju_to_j2u_j2u (),
+.BR libj2_j2u_rdivmod_j2u (),
+and
+.BR libj2_j2u_rdivmod_j2u_to_j2u ()
+functions were added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_divmod_j2i (),
+.BR libj2_j2i_divmod_j2i_to_j2i (),
+.BR libj2_j2i_divmod_j2i_to_j2i_j2i (),
+.BR libj2_j2i_divmod_ji (),
+.BR libj2_j2i_divmod_ji_to_j2i (),
+.BR libj2_j2i_divmod_ji_to_j2i_j2i (),
+.BR libj2_j2i_rdivmod_j2i (),
+and
+.BR libj2_j2i_rdivmod_j2i_to_j2i ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_div_j2i (3),
+.BR libj2_j2i_mod_j2i (3),
+.BR libj2_j2i_add_j2i (3),
+.BR libj2_j2i_sub_j2i (3),
+.BR libj2_j2u_sub_j2u (3),
+.BR libj2_j2i_mul_j2i (3)
diff --git a/libj2_j2i_divmod_j2i.c b/libj2_j2i_divmod_j2i.c
index a9b6a9b..0bb065c 100644
--- a/libj2_j2i_divmod_j2i.c
+++ b/libj2_j2i_divmod_j2i.c
@@ -3,24 +3,6 @@
#ifndef TEST
extern inline intmax_t libj2_j2i_divmod_j2i(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man pages
- libj2_j2i_divmod_j2i
- libj2_j2i_divmod_j2i_to_j2i
- libj2_j2i_divmod_j2i_to_j2i_j2i
- libj2_j2i_divmod_ji
- libj2_j2i_divmod_ji_to_j2i
- libj2_j2i_divmod_ji_to_j2i_j2i
- libj2_j2u_divmod_j2u
- libj2_j2u_divmod_j2u_to_j2u
- libj2_j2u_divmod_j2u_to_j2u_j2u
- libj2_j2u_divmod_ju
- libj2_j2u_divmod_ju_to_j2u
- libj2_j2u_divmod_ju_to_j2u_j2u
- libj2_j2i_rdivmod_j2i
- libj2_j2i_rdivmod_j2i_to_j2i
- libj2_j2u_rdivmod_j2u
- libj2_j2u_rdivmod_j2u_to_j2u
-*/
#else
diff --git a/libj2_j2i_eq_j2i.3 b/libj2_j2i_eq_j2i.3
index ac5ce87..85b786c 100644
--- a/libj2_j2i_eq_j2i.3
+++ b/libj2_j2i_eq_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_eq_j2i \- Check two values for equality
int \fBlibj2_j2i_eq_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_eq_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_eq_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_eq_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_eq_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_eq_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_eq_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_eq_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_eq_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_eq_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_eq_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_eq_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_ge_j2i.3 b/libj2_j2i_ge_j2i.3
index bc6990e..62a8ce0 100644
--- a/libj2_j2i_ge_j2i.3
+++ b/libj2_j2i_ge_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_ge_j2i \- Check value greater than or equal to another value
int \fBlibj2_j2i_ge_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_ge_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_ge_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_ge_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_ge_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_ge_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_ge_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_ge_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_ge_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_ge_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_ge_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_ge_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_gt_j2i.3 b/libj2_j2i_gt_j2i.3
index bf3b9d2..407edd5 100644
--- a/libj2_j2i_gt_j2i.3
+++ b/libj2_j2i_gt_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_gt_j2i \- Check value greater than another value
int \fBlibj2_j2i_gt_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_gt_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_gt_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_gt_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_gt_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_gt_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_gt_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_gt_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_gt_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_gt_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_gt_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_gt_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_le_j2i.3 b/libj2_j2i_le_j2i.3
index 8654f86..522c7aa 100644
--- a/libj2_j2i_le_j2i.3
+++ b/libj2_j2i_le_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_le_j2i \- Check value less than or equal to another value
int \fBlibj2_j2i_le_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_le_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_le_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_le_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_le_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_le_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_le_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_le_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_le_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_le_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_le_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_le_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_lsh.3 b/libj2_j2i_lsh.3
index ce5885e..26c2455 100644
--- a/libj2_j2i_lsh.3
+++ b/libj2_j2i_lsh.3
@@ -9,17 +9,22 @@ libj2_j2i_lsh \- Left-shift bits
void \fBlibj2_j2i_lsh\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
void \fBlibj2_j2i_lsh_to_j2i\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_ji_lsh_to_j2i\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
-void \fBlibj2_j2u_lsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
-void \fBlibj2_j2u_lsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_ju_lsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
+
int \fBlibj2_j2i_lsh_overflow\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_j2i_lsh_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
int \fBlibj2_ji_lsh_to_j2i_overflow\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_lsh_overflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
+int \fBlibj2_ji_lsh_overflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP);
+
+void \fBlibj2_j2u_lsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_lsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_lsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
+
int \fBlibj2_j2u_lsh_overflow\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_j2u_lsh_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
int \fBlibj2_ju_lsh_to_j2u_overflow\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
-int \fBlibj2_j2i_lsh_overflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
-int \fBlibj2_ji_lsh_overflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP);
+
int \fBlibj2_j2u_lsh_overflow_p\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_ju_lsh_overflow_p\fP(uintmax_t \fIa\fP, unsigned \fIb\fP);
.fi
diff --git a/libj2_j2i_lt_j2i.3 b/libj2_j2i_lt_j2i.3
index ac92433..5ab7f39 100644
--- a/libj2_j2i_lt_j2i.3
+++ b/libj2_j2i_lt_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_lt_j2i \- Check value less than another value
int \fBlibj2_j2i_lt_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_lt_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_lt_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_lt_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_lt_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_lt_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_lt_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_lt_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_lt_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_lt_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_lt_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_lt_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_max_j2i.3 b/libj2_j2i_max_j2i.3
index 9d8e672..a1cd5a9 100644
--- a/libj2_j2i_max_j2i.3
+++ b/libj2_j2i_max_j2i.3
@@ -10,6 +10,7 @@ void \fBlibj2_j2i_max_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *
void \fBlibj2_j2i_max_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_j2i_max_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
void \fBlibj2_j2i_max_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+
void \fBlibj2_j2u_max_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
void \fBlibj2_j2u_max_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_j2u_max_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
diff --git a/libj2_j2i_min_j2i.3 b/libj2_j2i_min_j2i.3
index 3ccd8e0..b8e9f1e 100644
--- a/libj2_j2i_min_j2i.3
+++ b/libj2_j2i_min_j2i.3
@@ -10,6 +10,7 @@ void \fBlibj2_j2i_min_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *
void \fBlibj2_j2i_min_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_j2i_min_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
void \fBlibj2_j2i_min_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+
void \fBlibj2_j2u_min_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
void \fBlibj2_j2u_min_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_j2u_min_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
diff --git a/libj2_j2i_mod_j2i.3 b/libj2_j2i_mod_j2i.3
new file mode 100644
index 0000000..b8ede9c
--- /dev/null
+++ b/libj2_j2i_mod_j2i.3
@@ -0,0 +1,94 @@
+.TH LIBJ2_J2I_MOD_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_mod_j2i \- Calculate remainder of division
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2i_mod_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+void \fBlibj2_j2i_mod_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2i_mod_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+void \fBlibj2_j2i_mod_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+
+void \fBlibj2_j2u_mod_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+void \fBlibj2_j2u_mod_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_mod_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+void \fBlibj2_j2u_mod_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+
+void \fBlibj2_j2i_rmod_j2i\fP(struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP);
+void \fBlibj2_j2u_rmod_j2u\fP(struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions calculate the
+calculate the divide
+.I a
+by
+.I b
+and stores the remainder in
+.IR r ,
+or in the first argument for the functions
+without an
+.I r
+argument.
+.PP
+The quotient is discarded.
+.PP
+The quotient is rounded towards zero.
+The remainder is defined such that the
+product of the rounded quotient and the
+divisor is equal to the difference between
+the dividend and the remainder.
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The above listed functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_mod_j2u (),
+.BR libj2_j2u_mod_j2u_to_j2u (),
+.BR libj2_j2u_mod_ju (),
+.BR libj2_j2u_mod_ju_to_j2u (),
+and
+.BR libj2_j2u_rmod_j2u ()
+functions were added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_mod_j2i (),
+.BR libj2_j2i_mod_j2i_to_j2i (),
+.BR libj2_j2i_mod_ji (),
+.BR libj2_j2i_mod_ji_to_j2i (),
+and
+.BR libj2_j2i_rmod_j2i ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH NOTES
+If you want both the quotient and
+the remainder, a
+.B divmod
+function (see
+.BR libj2_j2i_divmod_j2i (3))
+can be used to calculate both at the
+same time, for the computational
+cost of calculating one.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_divmod_j2i (3),
+.BR libj2_j2i_div_j2i (3),
+.BR libj2_j2i_add_j2i (3),
+.BR libj2_j2i_sub_j2i (3),
+.BR libj2_j2u_sub_j2u (3),
+.BR libj2_j2i_mul_j2i (3)
diff --git a/libj2_j2i_mod_j2i.c b/libj2_j2i_mod_j2i.c
index 661376a..81831b9 100644
--- a/libj2_j2i_mod_j2i.c
+++ b/libj2_j2i_mod_j2i.c
@@ -3,18 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_mod_j2i(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man pages
- libj2_j2i_mod_j2i
- libj2_j2i_mod_j2i_to_j2i
- libj2_j2i_mod_ji
- libj2_j2i_mod_ji_to_j2i
- libj2_j2u_mod_j2u
- libj2_j2u_mod_j2u_to_j2u
- libj2_j2u_mod_ju
- libj2_j2u_mod_ju_to_j2u
- libj2_j2i_rmod_j2i
- libj2_j2u_rmod_j2u
- */
#else
diff --git a/libj2_j2i_mul_j2i.3 b/libj2_j2i_mul_j2i.3
new file mode 100644
index 0000000..b0fb217
--- /dev/null
+++ b/libj2_j2i_mul_j2i.3
@@ -0,0 +1,276 @@
+.TH LIBJ2_J2I_MUL_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_mul_j2i \- Calculate product
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+enum libj2_overflow {
+ \fILIBJ2_NO_OVERFLOW\fP = 0,
+ \fILIBJ2_POSITIVE_OVERFLOW\fP = 1,
+ \fILIBJ2_POSITIVE_OVERFLOW_UNKNOWN\fP = 2,
+ \fILIBJ2_NEGATIVE_OVERFLOW\fP = -1,
+ \fILIBJ2_NEGATIVE_OVERFLOW_UNKNOWN\fP = -2
+};
+
+#define \fILIBJ2_OVERFLOW\fP LIBJ2_POSITIVE_OVERFLOW
+#define \fILIBJ2_OVERFLOW_UNKNOWN\fP LIBJ2_POSITIVE_OVERFLOW_UNKNOWN
+
+void \fBlibj2_j2i_mul_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+void \fBlibj2_j2i_mul_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2i_mul_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+void \fBlibj2_j2i_mul_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_mul_j2i_to_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_mul_ji_to_j2i\fP(intmax_t \fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_mul_j2i_overflow\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_mul_j2i_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+int \fBlibj2_j2i_mul_ji_overflow\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_j2i_mul_ji_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+int \fBlibj2_ji_mul_j2i_to_j2i_overflow\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_mul_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_mul_ji_overflow_p\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_mul_j2i_overflow_p\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
+enum libj2_overflow \fBlibj2_j2i_mul_j2i_overflow_p_quick\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+enum libj2_overflow \fBlibj2_j2i_mul_ji_overflow_p_quick\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+enum libj2_overflow \fBlibj2_ji_mul_j2i_overflow_p_quick\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
+int \fBlibj2_j2i_mul_j2i_to_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP, int *\fIr_set\fP);
+int \fBlibj2_j2i_mul_ji_to_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP, int *\fIr_set\fP);
+int \fBlibj2_ji_mul_j2i_to_j2i_overflow_p\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP, int *\fIr_set\fP);
+
+void \fBlibj2_j2u_mul_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+void \fBlibj2_j2u_mul_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_mul_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+void \fBlibj2_j2u_mul_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_mul_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_mul_ju_to_j2u\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_mul_j2u_destructive\fP(struct libj2_j2u *restrict \fIa\fP, struct libj2_j2u *restrict \fIb\fP);
+
+int \fBlibj2_j2u_mul_j2u_overflow\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_mul_j2u_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+int \fBlibj2_j2u_mul_ju_overflow\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_j2u_mul_ju_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+int \fBlibj2_ju_mul_j2u_to_j2u_overflow\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+int \fBlibj2_j2u_mul_j2u_overflow_destructive\fP(struct libj2_j2u *restrict \fIa\fP, struct libj2_j2u *restrict \fIb\fP);
+
+int \fBlibj2_j2u_mul_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_mul_ju_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_mul_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
+enum libj2_overflow \fBlibj2_j2u_mul_j2u_overflow_p_quick\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+enum libj2_overflow \fBlibj2_j2u_mul_ju_overflow_p_quick\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+enum libj2_overflow \fBlibj2_ju_mul_j2u_overflow_p_quick\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
+int \fBlibj2_j2u_mul_j2u_to_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP);
+int \fBlibj2_j2u_mul_ju_to_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP);
+int \fBlibj2_ju_mul_j2u_to_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions calculate the
+product of the values of
+.I a
+and
+.IR b .
+The functions with the parameter
+.I r
+store the result in
+.IR r ,
+the other functions store the result in
+.IR a ,
+except the functions
+.BR libj2_j2i_mul_j2i_overflow_p (),
+.BR libj2_j2i_mul_ji_overflow_p (),
+.BR libj2_ji_mul_j2i_overflow_p (),
+.BR libj2_j2u_mul_j2u_overflow_p (),
+.BR libj2_j2u_mul_ju_overflow_p (),
+.BR libj2_ju_mul_j2u_overflow_p (),
+.BR libj2_j2i_mul_j2i_overflow_p_quick (),
+.BR libj2_j2i_mul_ji_overflow_p_quick (),
+.BR libj2_ji_mul_j2i_overflow_p_quick (),
+.BR libj2_j2u_mul_j2u_overflow_p_quick (),
+.BR libj2_j2u_mul_ju_overflow_p_quick (),
+and
+.BR libj2_ju_mul_j2u_overflow_p_quick ()
+only predict overflow, and do not calculate
+the sum, and therefore does store it anywhere.
+.PP
+Additionally, in situations where the
+.BR libj2_j2i_mul_j2i_overflow_p_quick (),
+.BR libj2_j2i_mul_ji_overflow_p_quick (),
+.BR libj2_ji_mul_j2i_overflow_p_quick (),
+.BR libj2_j2u_mul_j2u_overflow_p_quick (),
+.BR libj2_j2u_mul_ju_overflow_p_quick (),
+and
+.BR libj2_ju_mul_j2u_overflow_p_quick ()
+functions return
+.I LIBJ2_POSITIVE_OVERFLOW_UNKNOWN
+or
+.IR LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN ,
+the
+.BR libj2_j2i_mul_j2i_to_j2i_overflow_p ()
+.BR libj2_j2i_mul_ji_to_j2i_overflow_p ()
+.BR libj2_ji_mul_j2i_to_j2i_overflow_p ()
+.BR libj2_j2u_mul_j2u_to_j2u_overflow_p ()
+.BR libj2_j2u_mul_ju_to_j2u_overflow_p (),
+and
+.BR libj2_ju_mul_j2u_to_j2u_overflow_p ()
+functions will calculate the product, store it in
+.I r
+and set
+.I *r_set
+to 1; in other situations, those functions will
+not modify
+.I r
+but will set
+.I *r_set
+to 0.
+.PP
+The value-returning functions (that is, those
+with word
+.B overflow
+in their name), detect arithmetic overflow.
+.PP
+The result is truncated to the least significant
+bits, as many as can be stored, in case of overflow;
+that is, modular arithmetics is used.
+.PP
+The
+.BR libj2_j2u_mul_j2u_destructive ()
+and
+.BR libj2_j2u_mul_j2u_overflow_destructive ()
+functions modifies
+.I b
+arbitrarily, and do not support
+.I a
+and
+.I b
+being the same pointer.
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+For functions with a return value, the functions
+return +1 if the result is positive but too large
+to be represented, -1 if the result is negative
+(not only possible with functions where the result is a
+.IR "struct libj2_j2i" )
+but too large, and 0 otherwise.
+For the
+.BR libj2_j2i_mul_j2i_overflow_p_quick (),
+.BR libj2_j2i_mul_ji_overflow_p_quick (),
+.BR libj2_ji_mul_j2i_overflow_p_quick (),
+.BR libj2_j2u_mul_j2u_overflow_p_quick (),
+.BR libj2_j2u_mul_ju_overflow_p_quick (),
+and
+.BR libj2_ju_mul_j2u_overflow_p_quick ()
+functions, the return value is a
+.BR "enum libj2_overflow" ,
+which may be unsigned, so to check if the
+return value was negative, it is best to
+first cast it to an integer, or compare it
+directly to the negative constants. Additionally,
+these functions will return
+.I LIBJ2_POSITIVE_OVERFLOW_UNKNOWN
+if the result is positive but if could not
+be determined without calculating the
+product whether the product is too large to
+be represented, and
+.I LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN
+if the result is negative but if could not
+be determined without calculating the
+product whether the product is too large to
+be represented.
+.PP
+Since the
+.BR libj2_j2u_mul_j2u_overflow_p_quick (),
+.BR libj2_j2u_mul_ju_overflow_p_quick (),
+and
+.BR libj2_ju_mul_j2u_overflow_p_quick ()
+functions operate on unsigned integers, they
+will never return
+.I LIBJ2_NEGATIVE_OVERFLOW
+or
+.IR LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN .
+
+.SH ERRORS
+The above listed functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_mul_j2u (),
+.BR libj2_j2u_mul_j2u_to_j2u (),
+.BR libj2_j2u_mul_ju (),
+.BR libj2_j2u_mul_ju_to_j2u (),
+.BR libj2_ju_mul_j2u_to_j2u (),
+.BR libj2_ju_mul_ju_to_j2u (),
+.BR libj2_j2u_mul_j2u_destructive (),
+.BR libj2_j2u_mul_j2u_overflow (),
+.BR libj2_j2u_mul_j2u_to_j2u_overflow (),
+.BR libj2_j2u_mul_ju_overflow (),
+.BR libj2_j2u_mul_ju_to_j2u_overflow (),
+.BR libj2_ju_mul_j2u_to_j2u_overflow (),
+.BR libj2_j2u_mul_j2u_overflow_destructive (),
+.BR libj2_j2u_mul_j2u_overflow_p (),
+.BR libj2_j2u_mul_ju_overflow_p (),
+.BR libj2_ju_mul_j2u_overflow_p (),
+.BR libj2_j2u_mul_j2u_overflow_p_quick (),
+.BR libj2_j2u_mul_ju_overflow_p_quick (),
+.BR libj2_ju_mul_j2u_overflow_p_quick (),
+.BR libj2_j2u_mul_j2u_to_j2u_overflow_p (),
+.BR libj2_j2u_mul_ju_to_j2u_overflow_p (),
+and
+.BR libj2_ju_mul_j2u_to_j2u_overflow_p ()
+functions and the
+.IR LIBJ2_NO_OVERFLOW ,
+.IR LIBJ2_OVERFLOW ,
+and
+.IR LIBJ2_OVERFLOW_UNKNOWN
+constants were added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_mul_j2i (),
+.BR libj2_j2i_mul_j2i_to_j2i (),
+.BR libj2_j2i_mul_ji (),
+.BR libj2_j2i_mul_ji_to_j2i (),
+.BR libj2_ji_mul_j2i_to_j2i (),
+.BR libj2_ji_mul_ji_to_j2i (),
+.BR libj2_j2i_mul_j2i_overflow (),
+.BR libj2_j2i_mul_j2i_to_j2i_overflow (),
+.BR libj2_j2i_mul_ji_overflow (),
+.BR libj2_j2i_mul_ji_to_j2i_overflow (),
+.BR libj2_ji_mul_j2i_to_j2i_overflow (),
+.BR libj2_j2i_mul_j2i_overflow_p (),
+.BR libj2_j2i_mul_ji_overflow_p (),
+.BR libj2_ji_mul_j2i_overflow_p (),
+.BR libj2_j2i_mul_j2i_overflow_p_quick (),
+.BR libj2_j2i_mul_ji_overflow_p_quick (),
+.BR libj2_ji_mul_j2i_overflow_p_quick (),
+.BR libj2_j2i_mul_j2i_to_j2i_overflow_p (),
+.BR libj2_j2i_mul_ji_to_j2i_overflow_p (),
+and
+.BR libj2_ji_mul_j2i_to_j2i_overflow_p ()
+functions and the
+.IR LIBJ2_POSITIVE_OVERFLOW ,
+.IR LIBJ2_POSITIVE_OVERFLOW_UNKNOWN ,
+.IR LIBJ2_NEGATIVE_OVERFLOW ,
+and
+.IR LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN
+constants were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_add_j2i (3),
+.BR libj2_j2i_sub_j2i (3),
+.BR libj2_j2u_sub_j2u (3),
+.BR libj2_j2i_divmod_j2i (3)
diff --git a/libj2_j2i_mul_j2i.c b/libj2_j2i_mul_j2i.c
index 5d2c825..ff93594 100644
--- a/libj2_j2i_mul_j2i.c
+++ b/libj2_j2i_mul_j2i.c
@@ -3,50 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_mul_j2i(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man pages
- libj2_j2i_mul_j2i
- libj2_j2i_mul_j2i_to_j2i
- libj2_j2i_mul_ji
- libj2_j2i_mul_ji_to_j2i
- libj2_ji_mul_j2i_to_j2i
- libj2_ji_mul_ji_to_j2i
- libj2_j2u_mul_j2u
- libj2_j2u_mul_j2u_to_j2u
- libj2_j2u_mul_ju
- libj2_j2u_mul_ju_to_j2u
- libj2_ju_mul_j2u_to_j2u
- libj2_ju_mul_ju_to_j2u
- libj2_j2u_mul_j2u_destructive
- libj2_j2i_mul_j2i_overflow
- libj2_j2i_mul_j2i_to_j2i_overflow
- libj2_j2i_mul_ji_overflow
- libj2_j2i_mul_ji_to_j2i_overflow
- libj2_ji_mul_j2i_to_j2i_overflow
- libj2_j2u_mul_j2u_overflow
- libj2_j2u_mul_j2u_to_j2u_overflow
- libj2_j2u_mul_ju_overflow
- libj2_j2u_mul_ju_to_j2u_overflow
- libj2_ju_mul_j2u_to_j2u_overflow
- libj2_j2u_mul_j2u_overflow_destructive
- libj2_j2i_mul_j2i_overflow_p
- libj2_j2i_mul_ji_overflow_p
- libj2_ji_mul_j2i_overflow_p
- libj2_j2u_mul_j2u_overflow_p
- libj2_j2u_mul_ju_overflow_p
- libj2_ju_mul_j2u_overflow_p
- libj2_j2i_mul_j2i_overflow_p_quick
- libj2_j2i_mul_ji_overflow_p_quick
- libj2_ji_mul_j2i_overflow_p_quick
- libj2_j2u_mul_j2u_overflow_p_quick
- libj2_j2u_mul_ju_overflow_p_quick
- libj2_ju_mul_j2u_overflow_p_quick
- libj2_j2i_mul_j2i_to_j2i_overflow_p
- libj2_j2i_mul_ji_to_j2i_overflow_p
- libj2_ji_mul_j2i_to_j2i_overflow_p
- libj2_j2u_mul_j2u_to_j2u_overflow_p
- libj2_j2u_mul_ju_to_j2u_overflow_p
- libj2_ju_mul_j2u_to_j2u_overflow_p
- */
#else
diff --git a/libj2_j2i_ne_j2i.3 b/libj2_j2i_ne_j2i.3
index 0ee7f94..23911ce 100644
--- a/libj2_j2i_ne_j2i.3
+++ b/libj2_j2i_ne_j2i.3
@@ -9,12 +9,15 @@ libj2_j2i_ne_j2i \- Check two values for inequality
int \fBlibj2_j2i_ne_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2i_ne_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ji_ne_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2i_ne_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2i_ne_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ji_ne_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+
int \fBlibj2_j2u_ne_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP);
int \fBlibj2_j2u_ne_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP);
int \fBlibj2_ju_ne_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
int \fBlibj2_j2u_ne_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
int \fBlibj2_j2u_ne_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
int \fBlibj2_ju_ne_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
diff --git a/libj2_j2i_rsh.3 b/libj2_j2i_rsh.3
index f5c6061..f0ceaa8 100644
--- a/libj2_j2i_rsh.3
+++ b/libj2_j2i_rsh.3
@@ -9,17 +9,22 @@ libj2_j2i_rsh \- Right-shift bits
void \fBlibj2_j2i_rsh\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
void \fBlibj2_j2i_rsh_to_j2i\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_ji_rsh_to_j2i\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
-void \fBlibj2_j2u_rsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
-void \fBlibj2_j2u_rsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_ju_rsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
+
int \fBlibj2_j2i_rsh_underflow\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_j2i_rsh_to_j2i_underflow\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
int \fBlibj2_ji_rsh_to_j2i_underflow\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_rsh_underflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
+int \fBlibj2_ji_rsh_underflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP);
+
+void \fBlibj2_j2u_rsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_rsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_rsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
+
int \fBlibj2_j2u_rsh_underflow\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_j2u_rsh_to_j2u_underflow\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
int \fBlibj2_ju_rsh_to_j2u_underflow\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
-int \fBlibj2_j2i_rsh_underflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP);
-int \fBlibj2_ji_rsh_underflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP);
+
int \fBlibj2_j2u_rsh_underflow_p\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
int \fBlibj2_ju_rsh_underflow_p\fP(uintmax_t \fIa\fP, unsigned \fIb\fP);
.fi
diff --git a/libj2_j2i_sub_j2i.3 b/libj2_j2i_sub_j2i.3
index 3890d23..466c84a 100644
--- a/libj2_j2i_sub_j2i.3
+++ b/libj2_j2i_sub_j2i.3
@@ -76,7 +76,6 @@ in their name), detect arithmetic overflow.
The result is truncated to the least significant
bits, as many as can be stored, in case of overflow;
that is, modular arithmetics is used.
-
.PP
The arguments are assumed to be
.RI non- NULL .
@@ -119,4 +118,6 @@ functions were added in version 1.1 of
.SH SEE ALSO
.BR libj2 (7),
.BR libj2_j2u_sub_j2u (3),
-.BR libj2_j2i_add_j2i (3)
+.BR libj2_j2i_add_j2i (3),
+.BR libj2_j2i_mul_j2i (3),
+.BR libj2_j2i_divmod_j2i (3)
diff --git a/libj2_j2i_to_str.3 b/libj2_j2i_to_str.3
new file mode 100644
index 0000000..ed64ab8
--- /dev/null
+++ b/libj2_j2i_to_str.3
@@ -0,0 +1,107 @@
+.TH LIBJ2_J2I_TO_STR 3 LIBJ2
+.SH NAME
+libj2_j2i_to_str \- ASCII-encode a double-max precision integer
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+size_t \fBlibj2_j2i_to_str\fP(const struct libj2_j2i *\fIa\fP, char *\fIbuf\fP,
+ size_t \fIbufsize\fP, const char *\fIdigits\fP);
+
+size_t \fBlibj2_j2u_to_str\fP(const struct libj2_j2u *\fIa\fP, char *\fIbuf\fP,
+ size_t \fIbufsize\fP, const char *\fIdigits\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_to_str ()
+and
+.BR libj2_j2u_to_str ()
+functions encode
+.I a
+in ASCII. The functions write up to
+.IR bufsize ,
+which may be 0, bytes, including a null
+byte to termiante the encoding, to
+.IR buf .
+.PP
+.I digits
+shall either be
+.I NULL
+(equivalent to
+.BR \(dq0123456789\(dq )
+for the decimal system, or the digits to use
+in order of value (zero first). The radix
+will be the length of
+.IR digits ,
+which must be atleast 2.
+.PP
+The string encoding will not contain any leading
+zeroes (if the value is zero, the string will be
+a single zero). In the case of
+.BR libj2_j2i_to_str (),
+if
+.I a
+is negative, the ASCII minus sign
+.RB ( - )
+will be used as the prefix sign. No sign is used
+for non-negative values.
+.PP
+If
+.I bufsize
+is non-zero but not large enough to fully encode
+.I a,
+.I buf[bufsize-1]
+will be set to a null byte.
+.PP
+The functions assume that
+.I a
+is
+.RI non- NULL .
+
+.SH RETURN VALUE
+The
+.BR libj2_j2i_to_str ()
+and
+.BR libj2_j2u_to_str ()
+functions return the number of bytes needed encode
+.I a
+with the radix determined by
+.I digits
+(10 if
+.IR NULL ).
+This count does not include the NUL byte at the end.
+
+.SH ERRORS
+The
+.BR libj2_j2i_to_str ()
+and
+.BR libj2_j2u_to_str ()
+functions will fail if
+.I digits
+is
+.RI non- NULL
+and contains less than 2 symbols or contain
+duplicate symbols. However no error code is used,
+instead the functions simply return 0.
+
+.SH HISTORY
+The
+.BR libj2_j2i_to_str ()
+and
+.BR libj2_j2u_to_str ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH NOTES
+The return value is not affected by
+.IR bufsize .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_str_to_j2i (3),
+.BR libj2_ju_to_j2i (3)
diff --git a/libj2_j2i_to_str.c b/libj2_j2i_to_str.c
index b938f17..8905aa3 100644
--- a/libj2_j2i_to_str.c
+++ b/libj2_j2i_to_str.c
@@ -3,10 +3,6 @@
#ifndef TEST
extern inline size_t libj2_j2i_to_str(const struct libj2_j2i *a, char *buf, size_t bufsize, const char *digits);
-/* TODO Add man pages
- * libj2_j2i_to_str
- * libj2_j2u_to_str
- */
#else
diff --git a/libj2_j2u_and_j2u.3 b/libj2_j2u_and_j2u.3
index 90a87d6..1054cee 100644
--- a/libj2_j2u_and_j2u.3
+++ b/libj2_j2u_and_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_and_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc
void \fBlibj2_j2u_and_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_and_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_and_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_and_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_and_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_and_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_and_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_if_j2u.3 b/libj2_j2u_if_j2u.3
index 4ec9270..1790eb9 100644
--- a/libj2_j2u_if_j2u.3
+++ b/libj2_j2u_if_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_if_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct
void \fBlibj2_j2u_if_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_if_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_if_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_if_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_if_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_if_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_if_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_imply_j2u.3 b/libj2_j2u_imply_j2u.3
index c6c6b52..1fe8848 100644
--- a/libj2_j2u_imply_j2u.3
+++ b/libj2_j2u_imply_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_imply_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const str
void \fBlibj2_j2u_imply_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_imply_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_imply_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_imply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_imply_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_imply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_imply_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_nand_j2u.3 b/libj2_j2u_nand_j2u.3
index f231a39..ecf15ca 100644
--- a/libj2_j2u_nand_j2u.3
+++ b/libj2_j2u_nand_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_nand_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const stru
void \fBlibj2_j2u_nand_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_nand_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_nand_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_nand_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_nand_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_nand_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_nand_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_nif_j2u.3 b/libj2_j2u_nif_j2u.3
index cab990a..98e3f3a 100644
--- a/libj2_j2u_nif_j2u.3
+++ b/libj2_j2u_nif_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_nif_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc
void \fBlibj2_j2u_nif_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_nif_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_nif_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_nif_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_nif_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_nif_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_nif_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_nimply_j2u.3 b/libj2_j2u_nimply_j2u.3
index 50df73b..273e0e5 100644
--- a/libj2_j2u_nimply_j2u.3
+++ b/libj2_j2u_nimply_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_nimply_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const st
void \fBlibj2_j2u_nimply_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_nimply_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_nimply_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_nimply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_nimply_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_nimply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_nimply_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_nor_j2u.3 b/libj2_j2u_nor_j2u.3
index d09e58c..d45b6a3 100644
--- a/libj2_j2u_nor_j2u.3
+++ b/libj2_j2u_nor_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_nor_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc
void \fBlibj2_j2u_nor_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_nor_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_nor_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_nor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_nor_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_nor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_nor_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_or_j2u.3 b/libj2_j2u_or_j2u.3
index 786d6d0..900cfdf 100644
--- a/libj2_j2u_or_j2u.3
+++ b/libj2_j2u_or_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_or_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct
void \fBlibj2_j2u_or_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_or_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_or_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_or_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_or_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_or_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_or_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_sub_j2u.3 b/libj2_j2u_sub_j2u.3
index 875d8d7..7fb94c5 100644
--- a/libj2_j2u_sub_j2u.3
+++ b/libj2_j2u_sub_j2u.3
@@ -127,4 +127,6 @@ overflow. Positive overflow is impossible.
.SH SEE ALSO
.BR libj2 (7),
.BR libj2_j2i_sub_j2i (3),
-.BR libj2_j2i_add_j2i (3)
+.BR libj2_j2i_add_j2i (3),
+.BR libj2_j2i_mul_j2i (3),
+.BR libj2_j2i_divmod_j2i (3)
diff --git a/libj2_j2u_to_j2i.3 b/libj2_j2u_to_j2i.3
new file mode 100644
index 0000000..30687e1
--- /dev/null
+++ b/libj2_j2u_to_j2i.3
@@ -0,0 +1,75 @@
+.TH LIBJ2_J2U_TO_J2I 3 LIBJ2
+.SH NAME
+libj2_j2u_to_j2i \- Convert between signed and unsigned double-max precision integer
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2u_to_j2i\fP(const struct libj2_j2u *\fIu\fP, struct libj2_j2i *\fIi\fP);
+void \fBlibj2_j2i_to_j2u\fP(const struct libj2_j2i *\fIi\fP, struct libj2_j2u *\fIu\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2u_to_j2i ()
+function converts
+.I u
+from unsigned double-max precision
+to signed double-max precision and
+stored the signed integer in
+.IR i .
+.PP
+The
+.BR libj2_j2i_to_j2u ()
+function converts
+.I i
+from signed double-max precision
+to unsigned double-max precision and
+stored the signed integer in
+.IR u .
+.PP
+The arguments are assumed to be
+.RI non- NULL .
+.PP
+.I u
+and
+.I i
+will be represented using the same bit
+sequence, by design, this means that if
+.I i
+is negative (for the
+.BR libj2_j2u_to_j2i ()
+function, this happs when
+.I u
+is too large to be represented by
+.BR "struct libj2_j2i" ),
+.I -i
+and the unsigned
+.I 0-u
+will have the same value.
+
+.SH RETURN VALUE
+None.
+
+.SH ERRORS
+The
+.BR libj2_j2u_to_j2i ()
+and
+.BR libj2_j2i_to_j2u ()
+functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_to_j2i ()
+and
+.BR libj2_j2i_to_j2u ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_ju_to_j2i (3)
diff --git a/libj2_j2u_to_j2i.c b/libj2_j2u_to_j2i.c
index f157b79..4fd02a9 100644
--- a/libj2_j2u_to_j2i.c
+++ b/libj2_j2u_to_j2i.c
@@ -3,10 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_to_j2i(const struct libj2_j2u *a, struct libj2_j2i *res);
-/* TODO Add man pages
- * libj2_j2u_to_j2i
- * libj2_j2i_to_j2u
- */
#else
diff --git a/libj2_j2u_xnor_j2u.3 b/libj2_j2u_xnor_j2u.3
index 83ad333..4dec2e8 100644
--- a/libj2_j2u_xnor_j2u.3
+++ b/libj2_j2u_xnor_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_xnor_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const stru
void \fBlibj2_j2u_xnor_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_xnor_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_xnor_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_xnor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_xnor_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_xnor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_xnor_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_j2u_xor_j2u.3 b/libj2_j2u_xor_j2u.3
index d6d779c..cd6588f 100644
--- a/libj2_j2u_xor_j2u.3
+++ b/libj2_j2u_xor_j2u.3
@@ -11,8 +11,9 @@ void \fBlibj2_j2u_xor_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc
void \fBlibj2_j2u_xor_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
void \fBlibj2_j2u_xor_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
void \fBlibj2_ju_xor_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
-void \fBlibj2_j2u_xor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP
-void \fBlibj2_j2u_xor_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP
+
+void \fBlibj2_j2u_xor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);
+void \fBlibj2_j2u_xor_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP);
.fi
.PP
Link with
diff --git a/libj2_max_j2i.3 b/libj2_max_j2i.3
index 173c1ec..1aeb655 100644
--- a/libj2_max_j2i.3
+++ b/libj2_max_j2i.3
@@ -9,12 +9,15 @@ libj2_max_j2i \- Select maximum of a set of values
void \fBlibj2_max_j2i\fP(struct libj2_j2i *\fIa\fP, ... /*, NULL */)
void \fBlibj2_max_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL, struct libj2_j2i *\fIr\fP */)
const struct libj2_j2i *\fBlibj2_max_j2i_return\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL */)
+
void \fBlibj2_vmax_j2i\fP(struct libj2_j2i *\fIa\fP, va_list \fIargs\fP)
void \fBlibj2_vmax_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP)
const struct libj2_j2i *\fBlibj2_vmax_j2i_return\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP)
+
void \fBlibj2_max_j2u\fP(struct libj2_j2u *\fIa\fP, ... /*, NULL */)
void \fBlibj2_max_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL, struct libj2_j2u *\fIr\fP */)
const struct libj2_j2u *\fBlibj2_max_j2u_return\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL */)
+
void \fBlibj2_vmax_j2u\fP(struct libj2_j2u *\fIa\fP, va_list \fIargs\fP)
void \fBlibj2_vmax_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP)
const struct libj2_j2u *\fBlibj2_vmax_j2u_return\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP)
diff --git a/libj2_min_j2i.3 b/libj2_min_j2i.3
index fca9412..bc83832 100644
--- a/libj2_min_j2i.3
+++ b/libj2_min_j2i.3
@@ -9,12 +9,15 @@ libj2_min_j2i \- Select minimum of a set of values
void \fBlibj2_min_j2i\fP(struct libj2_j2i *\fIa\fP, ... /*, NULL */)
void \fBlibj2_min_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL, struct libj2_j2i *\fIr\fP */)
const struct libj2_j2i *\fBlibj2_min_j2i_return\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL */)
+
void \fBlibj2_vmin_j2i\fP(struct libj2_j2i *\fIa\fP, va_list \fIargs\fP)
void \fBlibj2_vmin_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP)
const struct libj2_j2i *\fBlibj2_vmin_j2i_return\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP)
+
void \fBlibj2_min_j2u\fP(struct libj2_j2u *\fIa\fP, ... /*, NULL */)
void \fBlibj2_min_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL, struct libj2_j2u *\fIr\fP */)
const struct libj2_j2u *\fBlibj2_min_j2u_return\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL */)
+
void \fBlibj2_vmin_j2u\fP(struct libj2_j2u *\fIa\fP, va_list \fIargs\fP)
void \fBlibj2_vmin_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP)
const struct libj2_j2u *\fBlibj2_vmin_j2u_return\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP)
diff --git a/libj2_minus_j2i.3 b/libj2_minus_j2i.3
index 64aeda7..ca65b47 100644
--- a/libj2_minus_j2i.3
+++ b/libj2_minus_j2i.3
@@ -9,6 +9,7 @@ libj2_minus_j2i \- Additively inverse
void \fBlibj2_minus_j2i\fP(struct libj2_j2i *\fIa\fP);
void \fBlibj2_minus_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_minus_j2i_to_j2u\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2u *\fIr\fP);
+
void \fBlibj2_minus_j2u\fP(struct libj2_j2u *\fIa\fP);
void \fBlibj2_minus_j2u_to_j2i\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2i *\fIr\fP);
void \fBlibj2_minus_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP);
diff --git a/libj2_str_to_j2i.3 b/libj2_str_to_j2i.3
index f8da5f8..cc49d51 100644
--- a/libj2_str_to_j2i.3
+++ b/libj2_str_to_j2i.3
@@ -96,9 +96,9 @@ and 0 otherwise.
.I digits1
shall either be
.I NULL
-(equivlent to
+(equivalent to
.BR \(dq0123456789\(dq )
-for the decimal system, or the digits use
+for the decimal system, or the digits to use
in order of value (zero first). The radix
will be the length of
.IR digits1 ,