aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--README14
-rw-r--r--libj2.714
-rw-r--r--libj2.h6
-rw-r--r--libj2/mixed-comparison.h (renamed from libj2/mixed-comparsion.h)0
-rw-r--r--libj2/sign-shifting.h2
-rw-r--r--libj2/signed-comparison.h (renamed from libj2/signed-comparsion.h)0
-rw-r--r--libj2/strings.h6
-rw-r--r--libj2/unsigned-comparison.h (renamed from libj2/unsigned-comparsion.h)0
-rw-r--r--libj2_abs_j2i.368
-rw-r--r--libj2_abs_j2i.c1
l---------libj2_abs_j2i_to_j2i.31
-rw-r--r--libj2_abs_j2i_to_j2i.c1
l---------libj2_abs_j2i_to_j2u.31
-rw-r--r--libj2_abs_j2i_to_j2u.c1
-rw-r--r--libj2_j2i_add_j2i.3136
-rw-r--r--libj2_j2i_add_j2i.c1
l---------libj2_j2i_add_j2i_overflow.31
-rw-r--r--libj2_j2i_add_j2i_overflow.c1
l---------libj2_j2i_add_j2i_overflow_p.31
-rw-r--r--libj2_j2i_add_j2i_overflow_p.c1
l---------libj2_j2i_add_j2i_to_j2i.31
-rw-r--r--libj2_j2i_add_j2i_to_j2i.c1
l---------libj2_j2i_add_j2i_to_j2i_overflow.31
-rw-r--r--libj2_j2i_add_j2i_to_j2i_overflow.c1
l---------libj2_j2i_add_ji.31
-rw-r--r--libj2_j2i_add_ji.c1
l---------libj2_j2i_add_ji_overflow.31
-rw-r--r--libj2_j2i_add_ji_overflow.c1
l---------libj2_j2i_add_ji_overflow_p.31
-rw-r--r--libj2_j2i_add_ji_overflow_p.c1
l---------libj2_j2i_add_ji_to_j2i.31
-rw-r--r--libj2_j2i_add_ji_to_j2i.c1
l---------libj2_j2i_add_ji_to_j2i_overflow.31
-rw-r--r--libj2_j2i_add_ji_to_j2i_overflow.c1
-rw-r--r--libj2_j2i_cmp_j2i.38
-rw-r--r--libj2_j2i_eq_j2i.38
-rw-r--r--libj2_j2i_ge_j2i.36
-rw-r--r--libj2_j2i_gt_j2i.36
-rw-r--r--libj2_j2i_is_max.357
-rw-r--r--libj2_j2i_is_max.c1
-rw-r--r--libj2_j2i_is_min.364
-rw-r--r--libj2_j2i_is_min.c1
-rw-r--r--libj2_j2i_is_negative.346
-rw-r--r--libj2_j2i_is_negative.c1
-rw-r--r--libj2_j2i_is_positive.354
-rw-r--r--libj2_j2i_is_positive.c1
-rw-r--r--libj2_j2i_is_zero.357
-rw-r--r--libj2_j2i_is_zero.c1
-rw-r--r--libj2_j2i_le_j2i.36
-rw-r--r--libj2_j2i_lt_j2i.36
-rw-r--r--libj2_j2i_max.350
-rw-r--r--libj2_j2i_max.c1
-rw-r--r--libj2_j2i_min.357
-rw-r--r--libj2_j2i_min.c1
-rw-r--r--libj2_j2i_ne_j2i.38
l---------libj2_j2i_rsub_j2i.31
-rw-r--r--libj2_j2i_rsub_j2i.c1
l---------libj2_j2i_rsub_j2i_overflow.31
-rw-r--r--libj2_j2i_rsub_j2i_overflow.c1
l---------libj2_j2i_rsub_j2i_overflow_p.31
-rw-r--r--libj2_j2i_rsub_j2i_overflow_p.c1
l---------libj2_j2i_rsub_ji.31
-rw-r--r--libj2_j2i_rsub_ji.c1
l---------libj2_j2i_rsub_ji_overflow.31
-rw-r--r--libj2_j2i_rsub_ji_overflow.c1
l---------libj2_j2i_rsub_ji_overflow_p.31
-rw-r--r--libj2_j2i_rsub_ji_overflow_p.c1
-rw-r--r--libj2_j2i_sub_j2i.3122
-rw-r--r--libj2_j2i_sub_j2i.c1
l---------libj2_j2i_sub_j2i_overflow.31
-rw-r--r--libj2_j2i_sub_j2i_overflow.c1
l---------libj2_j2i_sub_j2i_overflow_p.31
-rw-r--r--libj2_j2i_sub_j2i_overflow_p.c1
l---------libj2_j2i_sub_j2i_to_j2i.31
-rw-r--r--libj2_j2i_sub_j2i_to_j2i.c1
l---------libj2_j2i_sub_j2i_to_j2i_overflow.31
-rw-r--r--libj2_j2i_sub_j2i_to_j2i_overflow.c1
l---------libj2_j2i_sub_ji.31
-rw-r--r--libj2_j2i_sub_ji.c1
l---------libj2_j2i_sub_ji_overflow.31
-rw-r--r--libj2_j2i_sub_ji_overflow.c1
l---------libj2_j2i_sub_ji_overflow_p.31
-rw-r--r--libj2_j2i_sub_ji_overflow_p.c1
l---------libj2_j2i_sub_ji_to_j2i.31
-rw-r--r--libj2_j2i_sub_ji_to_j2i.c1
l---------libj2_j2i_sub_ji_to_j2i_overflow.31
-rw-r--r--libj2_j2i_sub_ji_to_j2i_overflow.c1
-rw-r--r--libj2_j2i_zero.349
-rw-r--r--libj2_j2i_zero.c1
l---------libj2_j2u_add_j2u.31
-rw-r--r--libj2_j2u_add_j2u.c1
l---------libj2_j2u_add_j2u_overflow.31
-rw-r--r--libj2_j2u_add_j2u_overflow.c1
l---------libj2_j2u_add_j2u_overflow_p.31
-rw-r--r--libj2_j2u_add_j2u_overflow_p.c1
l---------libj2_j2u_add_j2u_to_j2u.31
-rw-r--r--libj2_j2u_add_j2u_to_j2u.c1
l---------libj2_j2u_add_j2u_to_j2u_overflow.31
-rw-r--r--libj2_j2u_add_j2u_to_j2u_overflow.c1
l---------libj2_j2u_add_ju.31
-rw-r--r--libj2_j2u_add_ju.c1
l---------libj2_j2u_add_ju_overflow.31
-rw-r--r--libj2_j2u_add_ju_overflow.c1
l---------libj2_j2u_add_ju_overflow_p.31
-rw-r--r--libj2_j2u_add_ju_overflow_p.c1
l---------libj2_j2u_add_ju_to_j2u.31
-rw-r--r--libj2_j2u_add_ju_to_j2u.c1
l---------libj2_j2u_add_ju_to_j2u_overflow.31
-rw-r--r--libj2_j2u_add_ju_to_j2u_overflow.c1
l---------libj2_j2u_is_max.31
-rw-r--r--libj2_j2u_is_max.c1
l---------libj2_j2u_is_min.31
-rw-r--r--libj2_j2u_is_min.c1
l---------libj2_j2u_is_positive.31
-rw-r--r--libj2_j2u_is_positive.c1
l---------libj2_j2u_is_zero.31
-rw-r--r--libj2_j2u_is_zero.c1
l---------libj2_j2u_max.31
-rw-r--r--libj2_j2u_max.c1
l---------libj2_j2u_min.31
-rw-r--r--libj2_j2u_min.c1
l---------libj2_j2u_rsub_j2u.31
-rw-r--r--libj2_j2u_rsub_j2u.c1
l---------libj2_j2u_rsub_j2u_overflow.31
-rw-r--r--libj2_j2u_rsub_j2u_overflow.c1
l---------libj2_j2u_rsub_j2u_overflow_p.31
-rw-r--r--libj2_j2u_rsub_j2u_overflow_p.c1
l---------libj2_j2u_rsub_ju.31
-rw-r--r--libj2_j2u_rsub_ju.c1
l---------libj2_j2u_rsub_ju_overflow.31
-rw-r--r--libj2_j2u_rsub_ju_overflow.c1
l---------libj2_j2u_rsub_ju_overflow_p.31
-rw-r--r--libj2_j2u_rsub_ju_overflow_p.c1
-rw-r--r--libj2_j2u_sub_j2u.3130
-rw-r--r--libj2_j2u_sub_j2u.c1
l---------libj2_j2u_sub_j2u_overflow.31
-rw-r--r--libj2_j2u_sub_j2u_overflow.c1
l---------libj2_j2u_sub_j2u_overflow_p.31
-rw-r--r--libj2_j2u_sub_j2u_overflow_p.c1
l---------libj2_j2u_sub_j2u_to_j2u.31
-rw-r--r--libj2_j2u_sub_j2u_to_j2u.c1
l---------libj2_j2u_sub_j2u_to_j2u_overflow.31
-rw-r--r--libj2_j2u_sub_j2u_to_j2u_overflow.c1
l---------libj2_j2u_sub_ju.31
-rw-r--r--libj2_j2u_sub_ju.c1
l---------libj2_j2u_sub_ju_overflow.31
-rw-r--r--libj2_j2u_sub_ju_overflow.c1
l---------libj2_j2u_sub_ju_overflow_p.31
-rw-r--r--libj2_j2u_sub_ju_overflow_p.c1
l---------libj2_j2u_sub_ju_to_j2u.31
-rw-r--r--libj2_j2u_sub_ju_to_j2u.c1
l---------libj2_j2u_sub_ju_to_j2u_overflow.31
-rw-r--r--libj2_j2u_sub_ju_to_j2u_overflow.c1
l---------libj2_j2u_zero.31
-rw-r--r--libj2_j2u_zero.c1
l---------libj2_ji_add_j2i_overflow_p.31
-rw-r--r--libj2_ji_add_j2i_overflow_p.c1
l---------libj2_ji_add_j2i_to_j2i.31
-rw-r--r--libj2_ji_add_j2i_to_j2i.c1
l---------libj2_ji_add_j2i_to_j2i_overflow.31
-rw-r--r--libj2_ji_add_j2i_to_j2i_overflow.c1
l---------libj2_ji_add_ji_to_j2i.31
-rw-r--r--libj2_ji_add_ji_to_j2i.c1
l---------libj2_ji_sub_j2i_overflow_p.31
-rw-r--r--libj2_ji_sub_j2i_overflow_p.c1
l---------libj2_ji_sub_j2i_to_j2i.31
-rw-r--r--libj2_ji_sub_j2i_to_j2i.c1
l---------libj2_ji_sub_j2i_to_j2i_overflow.31
-rw-r--r--libj2_ji_sub_j2i_to_j2i_overflow.c1
l---------libj2_ji_sub_ji_to_j2i.31
-rw-r--r--libj2_ji_sub_ji_to_j2i.c1
l---------libj2_ju_add_j2u_overflow_p.31
-rw-r--r--libj2_ju_add_j2u_overflow_p.c1
l---------libj2_ju_add_j2u_to_j2u.31
-rw-r--r--libj2_ju_add_j2u_to_j2u.c1
l---------libj2_ju_add_j2u_to_j2u_overflow.31
-rw-r--r--libj2_ju_add_j2u_to_j2u_overflow.c1
l---------libj2_ju_add_ju_to_j2u.31
-rw-r--r--libj2_ju_add_ju_to_j2u.c1
l---------libj2_ju_sub_j2u_overflow_p.31
-rw-r--r--libj2_ju_sub_j2u_overflow_p.c1
l---------libj2_ju_sub_j2u_to_j2u.31
-rw-r--r--libj2_ju_sub_j2u_to_j2u.c1
l---------libj2_ju_sub_j2u_to_j2u_overflow.31
-rw-r--r--libj2_ju_sub_j2u_to_j2u_overflow.c1
l---------libj2_ju_sub_ju_overflow_p.31
-rw-r--r--libj2_ju_sub_ju_overflow_p.c1
l---------libj2_ju_sub_ju_to_j2u.31
-rw-r--r--libj2_ju_sub_ju_to_j2u.c1
l---------libj2_ju_sub_ju_to_j2u_overflow.31
-rw-r--r--libj2_ju_sub_ju_to_j2u_overflow.c1
-rw-r--r--libj2_minus_abs_j2i.355
-rw-r--r--libj2_minus_abs_j2i.c1
l---------libj2_minus_abs_j2i_to_j2i.31
-rw-r--r--libj2_minus_abs_j2i_to_j2i.c1
-rw-r--r--libj2_minus_j2i.399
-rw-r--r--libj2_minus_j2i.c1
l---------libj2_minus_j2i_to_j2i.31
-rw-r--r--libj2_minus_j2i_to_j2i.c1
l---------libj2_minus_j2i_to_j2u.31
-rw-r--r--libj2_minus_j2i_to_j2u.c1
l---------libj2_minus_j2u.31
-rw-r--r--libj2_minus_j2u.c1
l---------libj2_minus_j2u_to_j2i.31
-rw-r--r--libj2_minus_j2u_to_j2i.c1
l---------libj2_minus_j2u_to_j2u.31
-rw-r--r--libj2_minus_j2u_to_j2u.c1
-rw-r--r--libj2_sgn_j2i.358
-rw-r--r--libj2_sgn_j2i.c1
l---------libj2_sgn_j2u.31
-rw-r--r--libj2_sgn_j2u.c1
212 files changed, 1250 insertions, 129 deletions
diff --git a/Makefile b/Makefile
index 61ce8d9..9cef96d 100644
--- a/Makefile
+++ b/Makefile
@@ -512,9 +512,9 @@ SUBHDR =\
libj2/constants.h\
libj2/signum.h\
libj2/constructors.h\
- libj2/unsigned-comparsion.h\
- libj2/signed-comparsion.h\
- libj2/mixed-comparsion.h\
+ libj2/unsigned-comparison.h\
+ libj2/signed-comparison.h\
+ libj2/mixed-comparison.h\
libj2/bitwise-logic.h\
libj2/sign-shifting.h\
libj2/bit-shifting.h\
diff --git a/README b/README
index c55ef0a..c29bb6e 100644
--- a/README
+++ b/README
@@ -17,10 +17,10 @@ DESCRIPTION
Extend an intrinsic integer to an extended-precision integer.
libj2_j2i_min(3), libj2_j2u_min(3)
- Assign the minimum presentable value.
+ Assign the minimum representable value.
libj2_j2i_max(3), libj2_j2u_max(3)
- Assign the maximum presentable value.
+ Assign the maximum representable value.
libj2_j2i_zero(3), libj2_j2u_zero(3)
Assign the value zero.
@@ -48,13 +48,13 @@ DESCRIPTION
libj2_minus_abs_j2i(3), libj2_minus_abs_j2i_to_j2i(3)
Calculate the additive inverse of the absolute value.
- libj2 provides the following comparsion functions:
+ libj2 provides the following comparison functions:
libj2_j2i_cmp_j2i(3), libj2_j2i_cmp_ji(3), libj2_ji_cmp_j2i(3),
libj2_j2i_cmp_j2u(3), libj2_j2i_cmp_ju(3), libj2_ji_cmp_j2u(3),
libj2_j2u_cmp_j2i(3), libj2_j2u_cmp_ji(3), libj2_ju_cmp_j2i(3),
libj2_j2u_cmp_j2u(3), libj2_j2u_cmp_ju(3), libj2_ju_cmp_j2u(3)
- Perform three-way comparision.
+ Perform three-way comparison.
libj2_j2i_eq_j2i(3), libj2_j2i_eq_ji(3), libj2_ji_eq_j2i(3),
libj2_j2i_eq_j2u(3), libj2_j2i_eq_ju(3), libj2_ji_eq_j2u(3),
@@ -95,10 +95,10 @@ DESCRIPTION
or eqaul to it.
libj2_j2i_is_min(3), libj2_j2u_is_min(3)
- Check whether a value is the minimum presentable value.
+ Check whether a value is the minimum representable value.
libj2_j2i_is_max(3), libj2_j2u_is_max(3)
- Check whether a value is the maximum presentable value.
+ Check whether a value is the maximum representable value.
libj2_j2i_is_zero(3), libj2_j2u_is_zero(3)
Check whether a value is the value zero.
@@ -110,7 +110,7 @@ DESCRIPTION
Check whether a value is negative.
libj2_sgn_j2i(3), libj2_sgn_j2u(3)
- Perform three-way comparision against the value zero (get the
+ Perform three-way comparison against the value zero (get the
signum of a value).
libj2_j2i_max_j2i(3), libj2_j2i_max_j2i_to_j2i(3),
diff --git a/libj2.7 b/libj2.7
index eb793f7..102e53e 100644
--- a/libj2.7
+++ b/libj2.7
@@ -30,12 +30,12 @@ Extend an intrinsic integer to an extended-precision integer.
.BR libj2_j2i_min (3),
.TQ
.BR libj2_j2u_min (3)
-Assign the minimum presentable value.
+Assign the minimum representable value.
.TP
.BR libj2_j2i_max (3),
.TQ
.BR libj2_j2u_max (3)
-Assign the maximum presentable value.
+Assign the maximum representable value.
.TP
.BR libj2_j2i_zero (3),
.TQ
@@ -91,7 +91,7 @@ Calculate the additive inverse.
Calculate the additive inverse of the absolute value.
.PP
.B libj2
-provides the following comparsion functions:
+provides the following comparison functions:
.TP
.BR libj2_j2i_cmp_j2i (3),
.TQ
@@ -116,7 +116,7 @@ provides the following comparsion functions:
.BR libj2_j2u_cmp_ju (3),
.TQ
.BR libj2_ju_cmp_j2u (3)
-Perform three-way comparision.
+Perform three-way comparison.
.TP
.BR libj2_j2i_eq_j2i (3),
.TQ
@@ -273,12 +273,12 @@ or eqaul to it.
.BR libj2_j2i_is_min (3),
.TQ
.BR libj2_j2u_is_min (3)
-Check whether a value is the minimum presentable value.
+Check whether a value is the minimum representable value.
.TP
.BR libj2_j2i_is_max (3),
.TQ
.BR libj2_j2u_is_max (3)
-Check whether a value is the maximum presentable value.
+Check whether a value is the maximum representable value.
.TP
.BR libj2_j2i_is_zero (3),
.TQ
@@ -296,7 +296,7 @@ Check whether a value is negative.
.BR libj2_sgn_j2i (3),
.TQ
.BR libj2_sgn_j2u (3)
-Perform three-way comparision against the value zero (get the
+Perform three-way comparison against the value zero (get the
signum of a value).
.TP
.BR libj2_j2i_max_j2i (3),
diff --git a/libj2.h b/libj2.h
index 7e389a6..7eb90d7 100644
--- a/libj2.h
+++ b/libj2.h
@@ -155,9 +155,9 @@ enum libj2_overflow {
#include "libj2/constants.h"
#include "libj2/signum.h"
#include "libj2/constructors.h"
-#include "libj2/unsigned-comparsion.h"
-#include "libj2/signed-comparsion.h"
-#include "libj2/mixed-comparsion.h"
+#include "libj2/unsigned-comparison.h"
+#include "libj2/signed-comparison.h"
+#include "libj2/mixed-comparison.h"
#include "libj2/bitwise-logic.h"
#include "libj2/sign-shifting.h"
#include "libj2/bit-shifting.h"
diff --git a/libj2/mixed-comparsion.h b/libj2/mixed-comparison.h
index dedf18d..dedf18d 100644
--- a/libj2/mixed-comparsion.h
+++ b/libj2/mixed-comparison.h
diff --git a/libj2/sign-shifting.h b/libj2/sign-shifting.h
index 7f57136..75a4620 100644
--- a/libj2/sign-shifting.h
+++ b/libj2/sign-shifting.h
@@ -93,7 +93,7 @@ libj2_minus_j2i(struct libj2_j2i *a)
* `libj2_minus_j2i_to_j2u(a, res)` implements
* `*res = -*a`
*
- * Overflows if `libj2_j2i_is_min(a) || libj2_j2i_is_positive(a)`
+ * Overflows if `libj2_j2i_is_positive(a)`
*
* @param a The integer to invert
* @param res Output parameter for the inverse
diff --git a/libj2/signed-comparsion.h b/libj2/signed-comparison.h
index 1bed2f1..1bed2f1 100644
--- a/libj2/signed-comparsion.h
+++ b/libj2/signed-comparison.h
diff --git a/libj2/strings.h b/libj2/strings.h
index 721b34f..05ccc80 100644
--- a/libj2/strings.h
+++ b/libj2/strings.h
@@ -83,7 +83,7 @@ size_t libj2_j2u_to_str(const struct libj2_j2u *a, char *buf, size_t bufsize, co
* '-' prefix characters
* @return 0 upon successful completion, or an error
* code on failure
- *
+ *
* @throws EINVAL `digits1` or `digits2` is misconfigured
* @throws EINVAL No digit was encountered;
* `*a` (unless it's `NULL`) will be set to
@@ -138,7 +138,7 @@ int libj2_str_to_j2u_sign(const char *s, size_t slen, char **end, const char *di
* @param a Output parameter for the decoded integer
* @return 0 upon successful completion, or an error
* code on failure
- *
+ *
* @throws EINVAL `digits1` or `digits2` is misconfigured
* @throws EINVAL No digit was encountered;
* `*a` (unless it's `NULL`) will be set to
@@ -259,7 +259,7 @@ libj2_j2i_to_str(const struct libj2_j2i *a, char *buf, size_t bufsize, const cha
* @param a Output parameter for the decoded integer
* @return 0 upon successful completion, or an error
* code on failure
- *
+ *
* @throws EINVAL `digits1` or `digits2` is misconfigured
* @throws EINVAL No digit was encountered;
* `*a` (unless it's `NULL`) will be set to
diff --git a/libj2/unsigned-comparsion.h b/libj2/unsigned-comparison.h
index c13397a..c13397a 100644
--- a/libj2/unsigned-comparsion.h
+++ b/libj2/unsigned-comparison.h
diff --git a/libj2_abs_j2i.3 b/libj2_abs_j2i.3
new file mode 100644
index 0000000..ca5d885
--- /dev/null
+++ b/libj2_abs_j2i.3
@@ -0,0 +1,68 @@
+.TH LIBJ2_ABS_J2I 3 LIBJ2
+.SH NAME
+libj2_abs_j2i \- Calculate absolute value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_abs_j2i\fP(struct libj2_j2i *\fIa\fP);
+void \fBlibj2_abs_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_abs_j2i_to_j2u\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_abs_j2i (),
+.BR libj2_abs_j2i_to_j2i (),
+and
+.BR libj2_abs_j2i_to_j2u ()
+functions calculate the absolute value of
+.IR a .
+.PP
+The
+.BR libj2_abs_j2i ()
+function stores the result in
+.IR a .
+.PP
+The
+.BR libj2_abs_j2i_to_j2i ()
+and
+.BR libj2_abs_j2i_to_j2u ()
+function stores the result in
+.IR r .
+.PP
+In the case that
+.I a
+is the minimum representable value, the
+calculation of the
+.BR libj2_abs_j2i ()
+and
+.BR libj2_abs_j2i_to_j2i ()
+functions overflow to the input value.
+.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_abs_j2i (),
+.BR libj2_abs_j2i_to_j2i (),
+and
+.BR libj2_abs_j2i_to_j2u ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_minus_j2i (3),
+.BR libj2_minus_abs_j2i (3)
diff --git a/libj2_abs_j2i.c b/libj2_abs_j2i.c
index 999ff8b..e3c9d33 100644
--- a/libj2_abs_j2i.c
+++ b/libj2_abs_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_abs_j2i(struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_abs_j2i_to_j2i.3 b/libj2_abs_j2i_to_j2i.3
new file mode 120000
index 0000000..f5881fe
--- /dev/null
+++ b/libj2_abs_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_abs_j2i.3 \ No newline at end of file
diff --git a/libj2_abs_j2i_to_j2i.c b/libj2_abs_j2i_to_j2i.c
index 00776ce..bbbc511 100644
--- a/libj2_abs_j2i_to_j2i.c
+++ b/libj2_abs_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_abs_j2i_to_j2i(const struct libj2_j2i *a, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_abs_j2i_to_j2u.3 b/libj2_abs_j2i_to_j2u.3
new file mode 120000
index 0000000..f5881fe
--- /dev/null
+++ b/libj2_abs_j2i_to_j2u.3
@@ -0,0 +1 @@
+libj2_abs_j2i.3 \ No newline at end of file
diff --git a/libj2_abs_j2i_to_j2u.c b/libj2_abs_j2i_to_j2u.c
index a50de01..e1f8876 100644
--- a/libj2_abs_j2i_to_j2u.c
+++ b/libj2_abs_j2i_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_abs_j2i_to_j2u(const struct libj2_j2i *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_j2i.3 b/libj2_j2i_add_j2i.3
new file mode 100644
index 0000000..f7d01d2
--- /dev/null
+++ b/libj2_j2i_add_j2i.3
@@ -0,0 +1,136 @@
+.TH LIBJ2_J2I_ADD_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_add_j2i \- Calculate sum
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2i_add_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+void \fBlibj2_j2i_add_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2i_add_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+void \fBlibj2_j2i_add_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_add_j2i_to_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_add_ji_to_j2i\fP(intmax_t \fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_add_j2i_overflow\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_add_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_add_ji_overflow\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_j2i_add_ji_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+int \fBlibj2_ji_add_j2i_to_j2i_overflow\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_add_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_add_ji_overflow_p\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_add_j2i_overflow_p\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
+void \fBlibj2_j2u_add_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+void \fBlibj2_j2u_add_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_add_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+void \fBlibj2_j2u_add_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_add_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_add_ju_to_j2u\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+
+int \fBlibj2_j2u_add_j2u_overflow\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_add_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_add_ju_overflow\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_j2u_add_ju_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+int \fBlibj2_ju_add_j2u_to_j2u_overflow\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+
+int \fBlibj2_j2u_add_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_add_ju_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_add_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions calculate the
+sum 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_add_j2i_overflow_p (),
+.BR libj2_j2i_add_ji_overflow_p (),
+.BR libj2_ji_add_j2i_overflow_p (),
+.BR libj2_j2u_add_j2u_overflow_p (),
+.BR libj2_j2u_add_ju_overflow_p (),
+and
+.BR libj2_ju_add_j2u_overflow_p ()
+only predict overflow, and do not calculate
+the sum, and therefore does store it anywhere.
+.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 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.
+
+.SH ERRORS
+The above listed functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_add_j2u (3),
+.BR libj2_j2u_add_j2u_to_j2u (3),
+.BR libj2_j2u_add_ju (3),
+.BR libj2_j2u_add_ju_to_j2u (3),
+.BR libj2_ju_add_j2u_to_j2u (3),
+.BR libj2_ju_add_ju_to_j2u (3),
+.BR libj2_j2u_add_j2u_overflow (3),
+.BR libj2_j2u_add_j2u_to_j2u_overflow (3),
+.BR libj2_j2u_add_ju_overflow (3),
+.BR libj2_j2u_add_ju_to_j2u_overflow (3),
+.BR libj2_ju_add_j2u_to_j2u_overflow (3),
+.BR libj2_j2u_add_j2u_overflow_p (3),
+.BR libj2_j2u_add_ju_overflow_p (3),
+and
+.BR libj2_ju_add_j2u_overflow_p (3)
+functions were added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_add_j2i (3),
+.BR libj2_j2i_add_j2i_to_j2i (3),
+.BR libj2_j2i_add_ji (3),
+.BR libj2_j2i_add_ji_to_j2i (3),
+.BR libj2_ji_add_j2i_to_j2i (3),
+.BR libj2_ji_add_ji_to_j2i (3),
+.BR libj2_j2i_add_j2i_overflow (3),
+.BR libj2_j2i_add_j2i_to_j2i_overflow (3),
+.BR libj2_j2i_add_ji_overflow (3),
+.BR libj2_j2i_add_ji_to_j2i_overflow (3),
+.BR libj2_ji_add_j2i_to_j2i_overflow (3),
+.BR libj2_j2i_add_j2i_overflow_p (3),
+.BR libj2_j2i_add_ji_overflow_p (3),
+and
+.BR libj2_ji_add_j2i_overflow_p (3)
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_sub_j2i (3),
+.BR libj2_j2u_sub_j2u (3)
diff --git a/libj2_j2i_add_j2i.c b/libj2_j2i_add_j2i.c
index f1889d8..7b58333 100644
--- a/libj2_j2i_add_j2i.c
+++ b/libj2_j2i_add_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_add_j2i(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_j2i_overflow.3 b/libj2_j2i_add_j2i_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_j2i_overflow.c b/libj2_j2i_add_j2i_overflow.c
index 02464d8..ec4f20a 100644
--- a/libj2_j2i_add_j2i_overflow.c
+++ b/libj2_j2i_add_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_add_j2i_overflow(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_j2i_overflow_p.3 b/libj2_j2i_add_j2i_overflow_p.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_j2i_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_j2i_overflow_p.c b/libj2_j2i_add_j2i_overflow_p.c
index 3b703be..9f39c17 100644
--- a/libj2_j2i_add_j2i_overflow_p.c
+++ b/libj2_j2i_add_j2i_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_add_j2i_overflow_p(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_j2i_to_j2i.3 b/libj2_j2i_add_j2i_to_j2i.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_j2i_to_j2i.c b/libj2_j2i_add_j2i_to_j2i.c
index 259f91e..a640196 100644
--- a/libj2_j2i_add_j2i_to_j2i.c
+++ b/libj2_j2i_add_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_add_j2i_to_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_j2i_to_j2i_overflow.3 b/libj2_j2i_add_j2i_to_j2i_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_j2i_to_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_j2i_to_j2i_overflow.c b/libj2_j2i_add_j2i_to_j2i_overflow.c
index b36ac10..44ad164 100644
--- a/libj2_j2i_add_j2i_to_j2i_overflow.c
+++ b/libj2_j2i_add_j2i_to_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_add_j2i_to_j2i_overflow(const struct libj2_j2i *a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_ji.3 b/libj2_j2i_add_ji.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_ji.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_ji.c b/libj2_j2i_add_ji.c
index 97880e2..ac60798 100644
--- a/libj2_j2i_add_ji.c
+++ b/libj2_j2i_add_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_add_ji(struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_ji_overflow.3 b/libj2_j2i_add_ji_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_ji_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_ji_overflow.c b/libj2_j2i_add_ji_overflow.c
index 1686ae4..e5e92a3 100644
--- a/libj2_j2i_add_ji_overflow.c
+++ b/libj2_j2i_add_ji_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_add_ji_overflow(struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_ji_overflow_p.3 b/libj2_j2i_add_ji_overflow_p.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_ji_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_ji_overflow_p.c b/libj2_j2i_add_ji_overflow_p.c
index 76fff49..fdd64ae 100644
--- a/libj2_j2i_add_ji_overflow_p.c
+++ b/libj2_j2i_add_ji_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_add_ji_overflow_p(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_ji_to_j2i.3 b/libj2_j2i_add_ji_to_j2i.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_ji_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_ji_to_j2i.c b/libj2_j2i_add_ji_to_j2i.c
index 787b563..7ab12cc 100644
--- a/libj2_j2i_add_ji_to_j2i.c
+++ b/libj2_j2i_add_ji_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_add_ji_to_j2i(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_add_ji_to_j2i_overflow.3 b/libj2_j2i_add_ji_to_j2i_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2i_add_ji_to_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_add_ji_to_j2i_overflow.c b/libj2_j2i_add_ji_to_j2i_overflow.c
index 9e813ac..1ab5b83 100644
--- a/libj2_j2i_add_ji_to_j2i_overflow.c
+++ b/libj2_j2i_add_ji_to_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_add_ji_to_j2i_overflow(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_cmp_j2i.3 b/libj2_j2i_cmp_j2i.3
index 162e09d..6da4b5b 100644
--- a/libj2_j2i_cmp_j2i.3
+++ b/libj2_j2i_cmp_j2i.3
@@ -85,4 +85,10 @@ functions were added in version 1.1 of
.BR libj2_j2i_lt_j2i (3),
.BR libj2_j2i_le_j2i (3),
.BR libj2_j2i_gt_j2i (3),
-.BR libj2_j2i_ge_j2i (3)
+.BR libj2_j2i_ge_j2i (3),
+.BR libj2_j2i_is_min (3),
+.BR libj2_j2i_is_max (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_eq_j2i.3 b/libj2_j2i_eq_j2i.3
index ceab214..ac5ce87 100644
--- a/libj2_j2i_eq_j2i.3
+++ b/libj2_j2i_eq_j2i.3
@@ -73,4 +73,10 @@ functions were added in version 1.1 of
.BR libj2_j2i_lt_j2i (3),
.BR libj2_j2i_le_j2i (3),
.BR libj2_j2i_gt_j2i (3),
-.BR libj2_j2i_ge_j2i (3)
+.BR libj2_j2i_ge_j2i (3),
+.BR libj2_j2i_is_min (3),
+.BR libj2_j2i_is_max (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_ge_j2i.3 b/libj2_j2i_ge_j2i.3
index 4c1dcc7..bc6990e 100644
--- a/libj2_j2i_ge_j2i.3
+++ b/libj2_j2i_ge_j2i.3
@@ -73,4 +73,8 @@ functions were added in version 1.1 of
.BR libj2_j2i_ne_j2i (3),
.BR libj2_j2i_lt_j2i (3),
.BR libj2_j2i_le_j2i (3),
-.BR libj2_j2i_gt_j2i (3)
+.BR libj2_j2i_gt_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_gt_j2i.3 b/libj2_j2i_gt_j2i.3
index 69795a6..bf3b9d2 100644
--- a/libj2_j2i_gt_j2i.3
+++ b/libj2_j2i_gt_j2i.3
@@ -73,4 +73,8 @@ functions were added in version 1.1 of
.BR libj2_j2i_ne_j2i (3),
.BR libj2_j2i_lt_j2i (3),
.BR libj2_j2i_le_j2i (3),
-.BR libj2_j2i_ge_j2i (3)
+.BR libj2_j2i_ge_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_is_max.3 b/libj2_j2i_is_max.3
new file mode 100644
index 0000000..0d05dd5
--- /dev/null
+++ b/libj2_j2i_is_max.3
@@ -0,0 +1,57 @@
+.TH LIBJ2_J2I_IS_MAX 3 LIBJ2
+.SH NAME
+libj2_j2i_is_max \- Compare against maximum representable value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_is_max\fP(const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_j2u_is_max\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_is_max ()
+and
+.BR libj2_j2u_is_max ()
+functions check whether
+.I a
+is the largest positive number.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is the maximum representable value,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_is_max ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_is_max ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_max (3),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_is_min (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_is_max.c b/libj2_j2i_is_max.c
index 78c9448..ce86ddc 100644
--- a/libj2_j2i_is_max.c
+++ b/libj2_j2i_is_max.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_is_max(const struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_is_min.3 b/libj2_j2i_is_min.3
new file mode 100644
index 0000000..d748d4f
--- /dev/null
+++ b/libj2_j2i_is_min.3
@@ -0,0 +1,64 @@
+.TH LIBJ2_J2I_IS_MIN 3 LIBJ2
+.SH NAME
+libj2_j2i_is_min \- Compare against minimum representable value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_is_min\fP(const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_j2u_is_min\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_is_min ()
+function checks whether
+.I a
+is the largest negative number.
+.PP
+The
+.BR libj2_j2u_is_min ()
+function is identical to the
+.BR libj2_j2u_is_zero ()
+function, since
+.I a
+cannot be negative for it because
+it is unsigned.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if
+.I a
+is the minimum representable value,
+and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_is_min ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_is_min ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_min (3),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_is_max (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_is_min.c b/libj2_j2i_is_min.c
index 2393b72..dd1117f 100644
--- a/libj2_j2i_is_min.c
+++ b/libj2_j2i_is_min.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_is_min(const struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_is_negative.3 b/libj2_j2i_is_negative.3
new file mode 100644
index 0000000..97c2199
--- /dev/null
+++ b/libj2_j2i_is_negative.3
@@ -0,0 +1,46 @@
+.TH LIBJ2_J2I_IS_NEGATIVE 3 LIBJ2
+.SH NAME
+libj2_j2i_is_negative \- Check if value is negative
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_is_negative\fP(const struct libj2_j2i *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_is_negative ()
+function checks whether the
+value of
+.I a
+is negative.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The function returns 1 if the value of
+.I a
+is negative, and 0 otherwise.
+
+.SH ERRORS
+The function cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2i_is_negative ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_is_negative.c b/libj2_j2i_is_negative.c
index 6970cb2..6a5f48a 100644
--- a/libj2_j2i_is_negative.c
+++ b/libj2_j2i_is_negative.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_is_negative(const struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_is_positive.3 b/libj2_j2i_is_positive.3
new file mode 100644
index 0000000..c08ddbe
--- /dev/null
+++ b/libj2_j2i_is_positive.3
@@ -0,0 +1,54 @@
+.TH LIBJ2_J2I_IS_POSITIVE 3 LIBJ2
+.SH NAME
+libj2_j2i_is_positive \- Check if value is positive
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_is_positive\fP(const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_j2u_is_positive\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_is_positive ()
+and
+.BR libj2_j2u_is_positive ()
+functions check whether the
+value of
+.I a
+is positive.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if the value of
+.I a
+is positive, and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_is_positive ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_is_positive ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_is_positive.c b/libj2_j2i_is_positive.c
index d36d5ec..04058bd 100644
--- a/libj2_j2i_is_positive.c
+++ b/libj2_j2i_is_positive.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_is_positive(const struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_is_zero.3 b/libj2_j2i_is_zero.3
new file mode 100644
index 0000000..e120c46
--- /dev/null
+++ b/libj2_j2i_is_zero.3
@@ -0,0 +1,57 @@
+.TH LIBJ2_J2I_IS_ZERO 3 LIBJ2
+.SH NAME
+libj2_j2i_is_zero \- Check if value is zero
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_j2i_is_zero\fP(const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_j2u_is_zero\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_is_zero ()
+and
+.BR libj2_j2u_is_zero ()
+functions check whether the
+value of
+.I a
+is zero.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return 1 if the value of
+.I a
+is zero, and 0 otherwise.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_is_zero ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_is_zero ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_zero (3),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_is_min (3),
+.BR libj2_j2i_is_max (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_is_zero.c b/libj2_j2i_is_zero.c
index 7559674..e2f71e4 100644
--- a/libj2_j2i_is_zero.c
+++ b/libj2_j2i_is_zero.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_is_zero(const struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_le_j2i.3 b/libj2_j2i_le_j2i.3
index e4d325a..8654f86 100644
--- a/libj2_j2i_le_j2i.3
+++ b/libj2_j2i_le_j2i.3
@@ -73,4 +73,8 @@ functions were added in version 1.1 of
.BR libj2_j2i_ne_j2i (3),
.BR libj2_j2i_lt_j2i (3),
.BR libj2_j2i_gt_j2i (3),
-.BR libj2_j2i_ge_j2i (3)
+.BR libj2_j2i_ge_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_lt_j2i.3 b/libj2_j2i_lt_j2i.3
index ba39d49..ac92433 100644
--- a/libj2_j2i_lt_j2i.3
+++ b/libj2_j2i_lt_j2i.3
@@ -73,4 +73,8 @@ functions were added in version 1.1 of
.BR libj2_j2i_ne_j2i (3),
.BR libj2_j2i_le_j2i (3),
.BR libj2_j2i_gt_j2i (3),
-.BR libj2_j2i_ge_j2i (3)
+.BR libj2_j2i_ge_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_max.3 b/libj2_j2i_max.3
new file mode 100644
index 0000000..f3580c9
--- /dev/null
+++ b/libj2_j2i_max.3
@@ -0,0 +1,50 @@
+.TH LIBJ2_J2I_MAX 3 LIBJ2
+.SH NAME
+libj2_j2i_max \- Assign maximum representable value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2i_max\fP(struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2u_max\fP(struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_max ()
+and
+.BR libj2_j2u_max ()
+functions assign the largest positive
+representable value to
+.IR r .
+.PP
+.I r
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_max ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_max ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_min (3),
+.BR libj2_j2i_zero (3),
+.BR libj2_j2i_is_max (3)
diff --git a/libj2_j2i_max.c b/libj2_j2i_max.c
index c751060..10fe379 100644
--- a/libj2_j2i_max.c
+++ b/libj2_j2i_max.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_max(struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_min.3 b/libj2_j2i_min.3
new file mode 100644
index 0000000..f2af4f5
--- /dev/null
+++ b/libj2_j2i_min.3
@@ -0,0 +1,57 @@
+.TH LIBJ2_J2I_MIN 3 LIBJ2
+.SH NAME
+libj2_j2i_min \- Assign minimum representable value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2i_min\fP(struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2u_min\fP(struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_min ()
+function assigns the largest negative
+representable value to
+.IR r .
+.PP
+The
+.BR libj2_j2u_min ()
+function is identical to the
+.BR libj2_j2u_zero ()
+function, since
+.I r
+cannot hold negative values because
+it is unsigned.
+.PP
+.I r
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_min ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_min ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_max (3),
+.BR libj2_j2i_zero (3),
+.BR libj2_j2i_is_min (3)
diff --git a/libj2_j2i_min.c b/libj2_j2i_min.c
index 201f69f..7adb716 100644
--- a/libj2_j2i_min.c
+++ b/libj2_j2i_min.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_min(struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_ne_j2i.3 b/libj2_j2i_ne_j2i.3
index 505492f..0ee7f94 100644
--- a/libj2_j2i_ne_j2i.3
+++ b/libj2_j2i_ne_j2i.3
@@ -73,4 +73,10 @@ functions were added in version 1.1 of
.BR libj2_j2i_lt_j2i (3),
.BR libj2_j2i_le_j2i (3),
.BR libj2_j2i_gt_j2i (3),
-.BR libj2_j2i_ge_j2i (3)
+.BR libj2_j2i_ge_j2i (3),
+.BR libj2_j2i_is_min (3),
+.BR libj2_j2i_is_max (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_positive (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_sgn_j2i (3)
diff --git a/libj2_j2i_rsub_j2i.3 b/libj2_j2i_rsub_j2i.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_rsub_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_rsub_j2i.c b/libj2_j2i_rsub_j2i.c
index ba68d80..745f31a 100644
--- a/libj2_j2i_rsub_j2i.c
+++ b/libj2_j2i_rsub_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_rsub_j2i(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_rsub_j2i_overflow.3 b/libj2_j2i_rsub_j2i_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_rsub_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_rsub_j2i_overflow.c b/libj2_j2i_rsub_j2i_overflow.c
index 9840a41..a665b5b 100644
--- a/libj2_j2i_rsub_j2i_overflow.c
+++ b/libj2_j2i_rsub_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_rsub_j2i_overflow(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_rsub_j2i_overflow_p.3 b/libj2_j2i_rsub_j2i_overflow_p.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_rsub_j2i_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_rsub_j2i_overflow_p.c b/libj2_j2i_rsub_j2i_overflow_p.c
index a45675c..9459beb 100644
--- a/libj2_j2i_rsub_j2i_overflow_p.c
+++ b/libj2_j2i_rsub_j2i_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_rsub_j2i_overflow_p(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_rsub_ji.3 b/libj2_j2i_rsub_ji.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_rsub_ji.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_rsub_ji.c b/libj2_j2i_rsub_ji.c
index eb99109..614eed4 100644
--- a/libj2_j2i_rsub_ji.c
+++ b/libj2_j2i_rsub_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_rsub_ji(struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_rsub_ji_overflow.3 b/libj2_j2i_rsub_ji_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_rsub_ji_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_rsub_ji_overflow.c b/libj2_j2i_rsub_ji_overflow.c
index 1fd1346..2227745 100644
--- a/libj2_j2i_rsub_ji_overflow.c
+++ b/libj2_j2i_rsub_ji_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_rsub_ji_overflow(struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_rsub_ji_overflow_p.3 b/libj2_j2i_rsub_ji_overflow_p.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_rsub_ji_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_rsub_ji_overflow_p.c b/libj2_j2i_rsub_ji_overflow_p.c
index bad6009..897ae1f 100644
--- a/libj2_j2i_rsub_ji_overflow_p.c
+++ b/libj2_j2i_rsub_ji_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_rsub_ji_overflow_p(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_j2i.3 b/libj2_j2i_sub_j2i.3
new file mode 100644
index 0000000..9d0fcf1
--- /dev/null
+++ b/libj2_j2i_sub_j2i.3
@@ -0,0 +1,122 @@
+.TH LIBJ2_J2I_SUB_J2I 3 LIBJ2
+.SH NAME
+libj2_j2i_sub_j2i \- Calculate difference
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2i_sub_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+void \fBlibj2_j2i_sub_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2i_sub_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+void \fBlibj2_j2i_sub_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_sub_j2i_to_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+void \fBlibj2_ji_sub_ji_to_j2i\fP(intmax_t \fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_sub_j2i_overflow\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_sub_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_sub_ji_overflow\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_j2i_sub_ji_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP);
+int \fBlibj2_ji_sub_j2i_to_j2i_overflow\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP);
+
+int \fBlibj2_j2i_sub_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP);
+int \fBlibj2_j2i_sub_ji_overflow_p\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP);
+int \fBlibj2_ji_sub_j2i_overflow_p\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP);
+
+void \fBlibj2_j2i_rsub_j2i\fP(struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP);
+void \fBlibj2_j2i_rsub_ji\fP(struct libj2_j2i *\fIb\fP, intmax_t \fIa\fP);
+
+int \fBlibj2_j2i_rsub_j2i_overflow\fP(struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_j2i_rsub_ji_overflow\fP(struct libj2_j2i *\fIb\fP, intmax_t \fIa\fP);
+
+int \fBlibj2_j2i_rsub_j2i_overflow_p\fP(const struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_j2i_rsub_ji_overflow_p\fP(const struct libj2_j2i *\fIb\fP, intmax_t \fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions calculate the
+difference of the values of
+.I a
+(the minuend)
+and
+.I b
+(the subtrahend).
+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_sub_j2i_overflow_p (),
+.BR libj2_j2i_sub_ji_overflow_p (),
+.BR libj2_ji_sub_j2i_overflow_p (),
+.BR libj2_j2i_rsub_j2i_overflow_p (),
+and
+.BR libj2_j2i_rsub_ji_overflow_p (),
+only predict overflow, and do not calculate
+the sum, and therefore does store it anywhere;
+and except the functions
+.BR libj2_j2i_rsub_j2i (),
+.BR libj2_j2i_rsub_ji (),
+.BR libj2_j2i_rsub_j2i_overflow (),
+and
+.BR libj2_j2i_rsub_ji_overflow (),
+store the result in
+.IR b .
+.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 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
+but too large, and 0 otherwise.
+
+.SH ERRORS
+The above listed functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2i_sub_j2i (3),
+.BR libj2_j2i_sub_j2i_to_j2i (3),
+.BR libj2_j2i_sub_ji (3),
+.BR libj2_j2i_sub_ji_to_j2i (3),
+.BR libj2_ji_sub_j2i_to_j2i (3),
+.BR libj2_ji_sub_ji_to_j2i (3),
+.BR libj2_j2i_sub_j2i_overflow (3),
+.BR libj2_j2i_sub_j2i_to_j2i_overflow (3),
+.BR libj2_j2i_sub_ji_overflow (3),
+.BR libj2_j2i_sub_ji_to_j2i_overflow (3),
+.BR libj2_ji_sub_j2i_to_j2i_overflow (3),
+.BR libj2_j2i_sub_j2i_overflow_p (3),
+.BR libj2_j2i_sub_ji_overflow_p (3),
+.BR libj2_ji_sub_j2i_overflow_p (3),
+.BR libj2_j2i_rsub_j2i (3),
+.BR libj2_j2i_rsub_ji (3),
+.BR libj2_j2i_rsub_j2i_overflow (3),
+.BR libj2_j2i_rsub_ji_overflow (3),
+.BR libj2_j2i_rsub_j2i_overflow_p (3),
+and
+.BR libj2_j2i_rsub_ji_overflow_p (3)
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2u_sub_j2u (3),
+.BR libj2_j2i_add_j2i (3)
diff --git a/libj2_j2i_sub_j2i.c b/libj2_j2i_sub_j2i.c
index 92a344a..0492bea 100644
--- a/libj2_j2i_sub_j2i.c
+++ b/libj2_j2i_sub_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_sub_j2i(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_j2i_overflow.3 b/libj2_j2i_sub_j2i_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_j2i_overflow.c b/libj2_j2i_sub_j2i_overflow.c
index 17275f2..292ae48 100644
--- a/libj2_j2i_sub_j2i_overflow.c
+++ b/libj2_j2i_sub_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_sub_j2i_overflow(struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_j2i_overflow_p.3 b/libj2_j2i_sub_j2i_overflow_p.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_j2i_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_j2i_overflow_p.c b/libj2_j2i_sub_j2i_overflow_p.c
index 0df616b..deb450b 100644
--- a/libj2_j2i_sub_j2i_overflow_p.c
+++ b/libj2_j2i_sub_j2i_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_sub_j2i_overflow_p(const struct libj2_j2i *a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_j2i_to_j2i.3 b/libj2_j2i_sub_j2i_to_j2i.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_j2i_to_j2i.c b/libj2_j2i_sub_j2i_to_j2i.c
index 5522262..1b95a03 100644
--- a/libj2_j2i_sub_j2i_to_j2i.c
+++ b/libj2_j2i_sub_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_sub_j2i_to_j2i(const struct libj2_j2i *a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_j2i_to_j2i_overflow.3 b/libj2_j2i_sub_j2i_to_j2i_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_j2i_to_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_j2i_to_j2i_overflow.c b/libj2_j2i_sub_j2i_to_j2i_overflow.c
index db703c9..9ce4f07 100644
--- a/libj2_j2i_sub_j2i_to_j2i_overflow.c
+++ b/libj2_j2i_sub_j2i_to_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_sub_j2i_to_j2i_overflow(const struct libj2_j2i *a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_ji.3 b/libj2_j2i_sub_ji.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_ji.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_ji.c b/libj2_j2i_sub_ji.c
index 27bf013..4fc8e0e 100644
--- a/libj2_j2i_sub_ji.c
+++ b/libj2_j2i_sub_ji.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_sub_ji(struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_ji_overflow.3 b/libj2_j2i_sub_ji_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_ji_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_ji_overflow.c b/libj2_j2i_sub_ji_overflow.c
index d8201be..e48b7a1 100644
--- a/libj2_j2i_sub_ji_overflow.c
+++ b/libj2_j2i_sub_ji_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_sub_ji_overflow(struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_ji_overflow_p.3 b/libj2_j2i_sub_ji_overflow_p.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_ji_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_ji_overflow_p.c b/libj2_j2i_sub_ji_overflow_p.c
index 1c07791..6cd194b 100644
--- a/libj2_j2i_sub_ji_overflow_p.c
+++ b/libj2_j2i_sub_ji_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_sub_ji_overflow_p(const struct libj2_j2i *a, intmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_ji_to_j2i.3 b/libj2_j2i_sub_ji_to_j2i.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_ji_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_ji_to_j2i.c b/libj2_j2i_sub_ji_to_j2i.c
index 4c06968..a3e76bd 100644
--- a/libj2_j2i_sub_ji_to_j2i.c
+++ b/libj2_j2i_sub_ji_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_sub_ji_to_j2i(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_sub_ji_to_j2i_overflow.3 b/libj2_j2i_sub_ji_to_j2i_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_j2i_sub_ji_to_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_j2i_sub_ji_to_j2i_overflow.c b/libj2_j2i_sub_ji_to_j2i_overflow.c
index 52b2d2f..7eb807e 100644
--- a/libj2_j2i_sub_ji_to_j2i_overflow.c
+++ b/libj2_j2i_sub_ji_to_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2i_sub_ji_to_j2i_overflow(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2i_zero.3 b/libj2_j2i_zero.3
new file mode 100644
index 0000000..f864672
--- /dev/null
+++ b/libj2_j2i_zero.3
@@ -0,0 +1,49 @@
+.TH LIBJ2_J2I_ZERO 3 LIBJ2
+.SH NAME
+libj2_j2i_zero \- Assign the value zero
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2i_zero\fP(struct libj2_j2i *\fIr\fP);
+void \fBlibj2_j2u_zero\fP(struct libj2_j2u *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_j2i_zero ()
+and
+.BR libj2_j2u_zero ()
+functions assign the value zero to
+.IR r .
+.PP
+.I r
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+None
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_zero ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_j2i_zero ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_min (3),
+.BR libj2_j2i_max (3),
+.BR libj2_j2i_is_zero (3)
diff --git a/libj2_j2i_zero.c b/libj2_j2i_zero.c
index ae8f904..3f4c8e4 100644
--- a/libj2_j2i_zero.c
+++ b/libj2_j2i_zero.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_zero(struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_j2u.3 b/libj2_j2u_add_j2u.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_j2u.c b/libj2_j2u_add_j2u.c
index 29d2a93..861e207 100644
--- a/libj2_j2u_add_j2u.c
+++ b/libj2_j2u_add_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_add_j2u(struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_j2u_overflow.3 b/libj2_j2u_add_j2u_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_j2u_overflow.c b/libj2_j2u_add_j2u_overflow.c
index cab3cf6..38b873e 100644
--- a/libj2_j2u_add_j2u_overflow.c
+++ b/libj2_j2u_add_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_add_j2u_overflow(struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_j2u_overflow_p.3 b/libj2_j2u_add_j2u_overflow_p.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_j2u_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_j2u_overflow_p.c b/libj2_j2u_add_j2u_overflow_p.c
index eea2fe6..8c619ab 100644
--- a/libj2_j2u_add_j2u_overflow_p.c
+++ b/libj2_j2u_add_j2u_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_add_j2u_overflow_p(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_j2u_to_j2u.3 b/libj2_j2u_add_j2u_to_j2u.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_j2u_to_j2u.c b/libj2_j2u_add_j2u_to_j2u.c
index ebd96da..1e4ce88 100644
--- a/libj2_j2u_add_j2u_to_j2u.c
+++ b/libj2_j2u_add_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_add_j2u_to_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_j2u_to_j2u_overflow.3 b/libj2_j2u_add_j2u_to_j2u_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_j2u_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_j2u_to_j2u_overflow.c b/libj2_j2u_add_j2u_to_j2u_overflow.c
index 8a152ff..41ea754 100644
--- a/libj2_j2u_add_j2u_to_j2u_overflow.c
+++ b/libj2_j2u_add_j2u_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_add_j2u_to_j2u_overflow(const struct libj2_j2u *a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_ju.3 b/libj2_j2u_add_ju.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_ju.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_ju.c b/libj2_j2u_add_ju.c
index 1b6458f..4e8fe10 100644
--- a/libj2_j2u_add_ju.c
+++ b/libj2_j2u_add_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_add_ju(struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_ju_overflow.3 b/libj2_j2u_add_ju_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_ju_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_ju_overflow.c b/libj2_j2u_add_ju_overflow.c
index 9c01dd2..c2a36d3 100644
--- a/libj2_j2u_add_ju_overflow.c
+++ b/libj2_j2u_add_ju_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_add_ju_overflow(struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_ju_overflow_p.3 b/libj2_j2u_add_ju_overflow_p.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_ju_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_ju_overflow_p.c b/libj2_j2u_add_ju_overflow_p.c
index 11d436f..fa693db 100644
--- a/libj2_j2u_add_ju_overflow_p.c
+++ b/libj2_j2u_add_ju_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_add_ju_overflow_p(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_ju_to_j2u.3 b/libj2_j2u_add_ju_to_j2u.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_ju_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_ju_to_j2u.c b/libj2_j2u_add_ju_to_j2u.c
index 348cc2c..ceda8aa 100644
--- a/libj2_j2u_add_ju_to_j2u.c
+++ b/libj2_j2u_add_ju_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_add_ju_to_j2u(const struct libj2_j2u *a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_add_ju_to_j2u_overflow.3 b/libj2_j2u_add_ju_to_j2u_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_j2u_add_ju_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_j2u_add_ju_to_j2u_overflow.c b/libj2_j2u_add_ju_to_j2u_overflow.c
index d93e76d..495556b 100644
--- a/libj2_j2u_add_ju_to_j2u_overflow.c
+++ b/libj2_j2u_add_ju_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_add_ju_to_j2u_overflow(const struct libj2_j2u *a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_is_max.3 b/libj2_j2u_is_max.3
new file mode 120000
index 0000000..6add9a4
--- /dev/null
+++ b/libj2_j2u_is_max.3
@@ -0,0 +1 @@
+libj2_j2i_is_max.3 \ No newline at end of file
diff --git a/libj2_j2u_is_max.c b/libj2_j2u_is_max.c
index 5e90264..cff2187 100644
--- a/libj2_j2u_is_max.c
+++ b/libj2_j2u_is_max.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_is_max(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_is_min.3 b/libj2_j2u_is_min.3
new file mode 120000
index 0000000..142f87d
--- /dev/null
+++ b/libj2_j2u_is_min.3
@@ -0,0 +1 @@
+libj2_j2i_is_min.3 \ No newline at end of file
diff --git a/libj2_j2u_is_min.c b/libj2_j2u_is_min.c
index 7a50372..78df3a5 100644
--- a/libj2_j2u_is_min.c
+++ b/libj2_j2u_is_min.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_is_min(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_is_positive.3 b/libj2_j2u_is_positive.3
new file mode 120000
index 0000000..5f5dd81
--- /dev/null
+++ b/libj2_j2u_is_positive.3
@@ -0,0 +1 @@
+libj2_j2i_is_positive.3 \ No newline at end of file
diff --git a/libj2_j2u_is_positive.c b/libj2_j2u_is_positive.c
index f4b7cfc..9a15bf5 100644
--- a/libj2_j2u_is_positive.c
+++ b/libj2_j2u_is_positive.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_is_positive(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_is_zero.3 b/libj2_j2u_is_zero.3
new file mode 120000
index 0000000..9906e5b
--- /dev/null
+++ b/libj2_j2u_is_zero.3
@@ -0,0 +1 @@
+libj2_j2i_is_zero.3 \ No newline at end of file
diff --git a/libj2_j2u_is_zero.c b/libj2_j2u_is_zero.c
index 4c2adf9..0d96334 100644
--- a/libj2_j2u_is_zero.c
+++ b/libj2_j2u_is_zero.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_is_zero(const struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_max.3 b/libj2_j2u_max.3
new file mode 120000
index 0000000..55fc6e0
--- /dev/null
+++ b/libj2_j2u_max.3
@@ -0,0 +1 @@
+libj2_j2i_max.3 \ No newline at end of file
diff --git a/libj2_j2u_max.c b/libj2_j2u_max.c
index 49fbb28..7440e99 100644
--- a/libj2_j2u_max.c
+++ b/libj2_j2u_max.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_max(struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_min.3 b/libj2_j2u_min.3
new file mode 120000
index 0000000..e36f02d
--- /dev/null
+++ b/libj2_j2u_min.3
@@ -0,0 +1 @@
+libj2_j2i_min.3 \ No newline at end of file
diff --git a/libj2_j2u_min.c b/libj2_j2u_min.c
index f2f78ae..fdf5f56 100644
--- a/libj2_j2u_min.c
+++ b/libj2_j2u_min.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_min(struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_rsub_j2u.3 b/libj2_j2u_rsub_j2u.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_rsub_j2u.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_rsub_j2u.c b/libj2_j2u_rsub_j2u.c
index edae0e7..9a1d5de 100644
--- a/libj2_j2u_rsub_j2u.c
+++ b/libj2_j2u_rsub_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_rsub_j2u(struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_rsub_j2u_overflow.3 b/libj2_j2u_rsub_j2u_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_rsub_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_rsub_j2u_overflow.c b/libj2_j2u_rsub_j2u_overflow.c
index e730930..39963dc 100644
--- a/libj2_j2u_rsub_j2u_overflow.c
+++ b/libj2_j2u_rsub_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_rsub_j2u_overflow(struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_rsub_j2u_overflow_p.3 b/libj2_j2u_rsub_j2u_overflow_p.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_rsub_j2u_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_rsub_j2u_overflow_p.c b/libj2_j2u_rsub_j2u_overflow_p.c
index 4bf6cab..0081cde 100644
--- a/libj2_j2u_rsub_j2u_overflow_p.c
+++ b/libj2_j2u_rsub_j2u_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_rsub_j2u_overflow_p(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_rsub_ju.3 b/libj2_j2u_rsub_ju.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_rsub_ju.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_rsub_ju.c b/libj2_j2u_rsub_ju.c
index cd3a80f..3ed3cb4 100644
--- a/libj2_j2u_rsub_ju.c
+++ b/libj2_j2u_rsub_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_rsub_ju(struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_rsub_ju_overflow.3 b/libj2_j2u_rsub_ju_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_rsub_ju_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_rsub_ju_overflow.c b/libj2_j2u_rsub_ju_overflow.c
index 398479f..d609af5 100644
--- a/libj2_j2u_rsub_ju_overflow.c
+++ b/libj2_j2u_rsub_ju_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_rsub_ju_overflow(struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_rsub_ju_overflow_p.3 b/libj2_j2u_rsub_ju_overflow_p.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_rsub_ju_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_rsub_ju_overflow_p.c b/libj2_j2u_rsub_ju_overflow_p.c
index 9666070..d7c5448 100644
--- a/libj2_j2u_rsub_ju_overflow_p.c
+++ b/libj2_j2u_rsub_ju_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_rsub_ju_overflow_p(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_j2u.3 b/libj2_j2u_sub_j2u.3
new file mode 100644
index 0000000..c2a5baf
--- /dev/null
+++ b/libj2_j2u_sub_j2u.3
@@ -0,0 +1,130 @@
+.TH LIBJ2_J2U_SUB_J2U 3 LIBJ2
+.SH NAME
+libj2_j2u_sub_j2u \- Calculate difference
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_j2u_sub_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+void \fBlibj2_j2u_sub_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_j2u_sub_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+void \fBlibj2_j2u_sub_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_sub_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+void \fBlibj2_ju_sub_ju_to_j2u\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+
+int \fBlibj2_j2u_sub_j2u_overflow\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_sub_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_sub_ju_overflow\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_j2u_sub_ju_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+int \fBlibj2_ju_sub_j2u_to_j2u_overflow\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP);
+int \fBlibj2_ju_sub_ju_to_j2u_overflow\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP);
+
+int \fBlibj2_j2u_sub_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_j2u_sub_ju_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP);
+int \fBlibj2_ju_sub_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP);
+int \fBlibj2_ju_sub_ju_overflow_p\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP);
+
+void \fBlibj2_j2u_rsub_j2u\fP(struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP);
+void \fBlibj2_j2u_rsub_ju\fP(struct libj2_j2u *\fIb\fP, uintmax_t \fIa\fP);
+
+int \fBlibj2_j2u_rsub_j2u_overflow\fP(struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP);
+int \fBlibj2_j2u_rsub_ju_overflow\fP(struct libj2_j2u *\fIb\fP, uintmax_t \fIa\fP);
+
+int \fBlibj2_j2u_rsub_j2u_overflow_p\fP(const struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP);
+int \fBlibj2_j2u_rsub_ju_overflow_p\fP(const struct libj2_j2u *\fIb\fP, uintmax_t \fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The above listed functions calculate the
+difference of the values of
+.I a
+(the minuend)
+and
+.I b
+(the subtrahend).
+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_j2u_sub_j2u_overflow_p (),
+.BR libj2_j2u_sub_ju_overflow_p (),
+.BR libj2_ju_sub_j2u_overflow_p (),
+.BR libj2_ju_sub_ju_overflow_p (),
+.BR libj2_j2u_rsub_j2u_overflow_p (),
+and
+.BR libj2_j2u_rsub_ju_overflow_p (),
+only predict overflow, and do not calculate
+the sum, and therefore does store it anywhere;
+and except the functions
+.BR libj2_j2u_rsub_j2u (),
+.BR libj2_j2u_rsub_ju (),
+.BR libj2_j2u_rsub_j2u_overflow (),
+and
+.BR libj2_j2u_rsub_ju_overflow (),
+store the result in
+.IR b .
+.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 arguments are assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+For functions with a return value, the functions
+return 1 if the result too large to be represented,
+and 0 otherwise.
+
+.SH ERRORS
+The above listed functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_j2u_sub_j2u (3),
+.BR libj2_j2u_sub_j2u_to_j2u (3),
+.BR libj2_j2u_sub_ju (3),
+.BR libj2_j2u_sub_ju_to_j2u (3),
+.BR libj2_ju_sub_j2u_to_j2u (3),
+.BR libj2_ju_sub_ju_to_j2u (3),
+.BR libj2_j2u_sub_j2u_overflow (3),
+.BR libj2_j2u_sub_j2u_to_j2u_overflow (3),
+.BR libj2_j2u_sub_ju_overflow (3),
+.BR libj2_j2u_sub_ju_to_j2u_overflow (3),
+.BR libj2_ju_sub_j2u_to_j2u_overflow (3),
+.BR libj2_ju_sub_ju_to_j2u_overflow (3),
+.BR libj2_j2u_sub_j2u_overflow_p (3),
+.BR libj2_j2u_sub_ju_overflow_p (3),
+.BR libj2_ju_sub_j2u_overflow_p (3),
+.BR libj2_ju_sub_ju_overflow_p (3),
+.BR libj2_j2u_rsub_j2u (3),
+.BR libj2_j2u_rsub_ju (3),
+.BR libj2_j2u_rsub_j2u_overflow (3),
+.BR libj2_j2u_rsub_ju_overflow (3),
+.BR libj2_j2u_rsub_j2u_overflow_p (3),
+and
+.BR libj2_j2u_rsub_ju_overflow_p (3)
+functions were added in version 1.0 of
+.BR libj2 .
+
+.SH NOTES
+The return value 1 represents negative
+overflow. Positive overflow is impossible.
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_sub_j2i (3),
+.BR libj2_j2i_add_j2i (3)
diff --git a/libj2_j2u_sub_j2u.c b/libj2_j2u_sub_j2u.c
index d69fb02..288aa33 100644
--- a/libj2_j2u_sub_j2u.c
+++ b/libj2_j2u_sub_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_sub_j2u(struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_j2u_overflow.3 b/libj2_j2u_sub_j2u_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_j2u_overflow.c b/libj2_j2u_sub_j2u_overflow.c
index c4e3052..e2d723d 100644
--- a/libj2_j2u_sub_j2u_overflow.c
+++ b/libj2_j2u_sub_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_sub_j2u_overflow(struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_j2u_overflow_p.3 b/libj2_j2u_sub_j2u_overflow_p.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_j2u_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_j2u_overflow_p.c b/libj2_j2u_sub_j2u_overflow_p.c
index 424b9a0..841b5e1 100644
--- a/libj2_j2u_sub_j2u_overflow_p.c
+++ b/libj2_j2u_sub_j2u_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_sub_j2u_overflow_p(const struct libj2_j2u *a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_j2u_to_j2u.3 b/libj2_j2u_sub_j2u_to_j2u.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_j2u_to_j2u.c b/libj2_j2u_sub_j2u_to_j2u.c
index 4f3e0c3..0cc2c47 100644
--- a/libj2_j2u_sub_j2u_to_j2u.c
+++ b/libj2_j2u_sub_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_sub_j2u_to_j2u(const struct libj2_j2u *a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_j2u_to_j2u_overflow.3 b/libj2_j2u_sub_j2u_to_j2u_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_j2u_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_j2u_to_j2u_overflow.c b/libj2_j2u_sub_j2u_to_j2u_overflow.c
index ca518a9..42fe088 100644
--- a/libj2_j2u_sub_j2u_to_j2u_overflow.c
+++ b/libj2_j2u_sub_j2u_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_sub_j2u_to_j2u_overflow(const struct libj2_j2u *a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_ju.3 b/libj2_j2u_sub_ju.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_ju.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_ju.c b/libj2_j2u_sub_ju.c
index 651cd1c..1c6f174 100644
--- a/libj2_j2u_sub_ju.c
+++ b/libj2_j2u_sub_ju.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_sub_ju(struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_ju_overflow.3 b/libj2_j2u_sub_ju_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_ju_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_ju_overflow.c b/libj2_j2u_sub_ju_overflow.c
index 4b675be..0809417 100644
--- a/libj2_j2u_sub_ju_overflow.c
+++ b/libj2_j2u_sub_ju_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_sub_ju_overflow(struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_ju_overflow_p.3 b/libj2_j2u_sub_ju_overflow_p.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_ju_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_ju_overflow_p.c b/libj2_j2u_sub_ju_overflow_p.c
index 54b037d..0da311b 100644
--- a/libj2_j2u_sub_ju_overflow_p.c
+++ b/libj2_j2u_sub_ju_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_sub_ju_overflow_p(const struct libj2_j2u *a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_ju_to_j2u.3 b/libj2_j2u_sub_ju_to_j2u.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_ju_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_ju_to_j2u.c b/libj2_j2u_sub_ju_to_j2u.c
index 78ddc3a..d57326e 100644
--- a/libj2_j2u_sub_ju_to_j2u.c
+++ b/libj2_j2u_sub_ju_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2u_sub_ju_to_j2u(const struct libj2_j2u *a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_sub_ju_to_j2u_overflow.3 b/libj2_j2u_sub_ju_to_j2u_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_j2u_sub_ju_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_j2u_sub_ju_to_j2u_overflow.c b/libj2_j2u_sub_ju_to_j2u_overflow.c
index 4f983ab..cdd40f9 100644
--- a/libj2_j2u_sub_ju_to_j2u_overflow.c
+++ b/libj2_j2u_sub_ju_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_j2u_sub_ju_to_j2u_overflow(const struct libj2_j2u *a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_j2u_zero.3 b/libj2_j2u_zero.3
new file mode 120000
index 0000000..49c665e
--- /dev/null
+++ b/libj2_j2u_zero.3
@@ -0,0 +1 @@
+libj2_j2i_zero.3 \ No newline at end of file
diff --git a/libj2_j2u_zero.c b/libj2_j2u_zero.c
index b95a91d..192c710 100644
--- a/libj2_j2u_zero.c
+++ b/libj2_j2u_zero.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_j2i_zero(struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_add_j2i_overflow_p.3 b/libj2_ji_add_j2i_overflow_p.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ji_add_j2i_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_add_j2i_overflow_p.c b/libj2_ji_add_j2i_overflow_p.c
index 82ccd0a..bd38a5c 100644
--- a/libj2_ji_add_j2i_overflow_p.c
+++ b/libj2_ji_add_j2i_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_add_j2i_overflow_p(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_add_j2i_to_j2i.3 b/libj2_ji_add_j2i_to_j2i.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ji_add_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_add_j2i_to_j2i.c b/libj2_ji_add_j2i_to_j2i.c
index dafa114..9b15477 100644
--- a/libj2_ji_add_j2i_to_j2i.c
+++ b/libj2_ji_add_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ji_add_j2i_to_j2i(intmax_t a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_add_j2i_to_j2i_overflow.3 b/libj2_ji_add_j2i_to_j2i_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ji_add_j2i_to_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_add_j2i_to_j2i_overflow.c b/libj2_ji_add_j2i_to_j2i_overflow.c
index bbdbd95..3586042 100644
--- a/libj2_ji_add_j2i_to_j2i_overflow.c
+++ b/libj2_ji_add_j2i_to_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_add_j2i_to_j2i_overflow(intmax_t a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_add_ji_to_j2i.3 b/libj2_ji_add_ji_to_j2i.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ji_add_ji_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_add_ji_to_j2i.c b/libj2_ji_add_ji_to_j2i.c
index 08bf2e1..9bd741d 100644
--- a/libj2_ji_add_ji_to_j2i.c
+++ b/libj2_ji_add_ji_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ji_add_ji_to_j2i(intmax_t a, intmax_t b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_sub_j2i_overflow_p.3 b/libj2_ji_sub_j2i_overflow_p.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_ji_sub_j2i_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_sub_j2i_overflow_p.c b/libj2_ji_sub_j2i_overflow_p.c
index afd2d4d..e9782e0 100644
--- a/libj2_ji_sub_j2i_overflow_p.c
+++ b/libj2_ji_sub_j2i_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_sub_j2i_overflow_p(intmax_t a, const struct libj2_j2i *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_sub_j2i_to_j2i.3 b/libj2_ji_sub_j2i_to_j2i.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_ji_sub_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_sub_j2i_to_j2i.c b/libj2_ji_sub_j2i_to_j2i.c
index d77aca3..bd3f2bc 100644
--- a/libj2_ji_sub_j2i_to_j2i.c
+++ b/libj2_ji_sub_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ji_sub_j2i_to_j2i(intmax_t a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_sub_j2i_to_j2i_overflow.3 b/libj2_ji_sub_j2i_to_j2i_overflow.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_ji_sub_j2i_to_j2i_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_sub_j2i_to_j2i_overflow.c b/libj2_ji_sub_j2i_to_j2i_overflow.c
index ff8a3a4..7106537 100644
--- a/libj2_ji_sub_j2i_to_j2i_overflow.c
+++ b/libj2_ji_sub_j2i_to_j2i_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ji_sub_j2i_to_j2i_overflow(intmax_t a, const struct libj2_j2i *b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ji_sub_ji_to_j2i.3 b/libj2_ji_sub_ji_to_j2i.3
new file mode 120000
index 0000000..2bb1ba8
--- /dev/null
+++ b/libj2_ji_sub_ji_to_j2i.3
@@ -0,0 +1 @@
+libj2_j2i_sub_j2i.3 \ No newline at end of file
diff --git a/libj2_ji_sub_ji_to_j2i.c b/libj2_ji_sub_ji_to_j2i.c
index 018c93c..1057db6 100644
--- a/libj2_ji_sub_ji_to_j2i.c
+++ b/libj2_ji_sub_ji_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ji_sub_ji_to_j2i(intmax_t a, intmax_t b, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_add_j2u_overflow_p.3 b/libj2_ju_add_j2u_overflow_p.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ju_add_j2u_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_add_j2u_overflow_p.c b/libj2_ju_add_j2u_overflow_p.c
index bc827c8..fc9e6fa 100644
--- a/libj2_ju_add_j2u_overflow_p.c
+++ b/libj2_ju_add_j2u_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_add_j2u_overflow_p(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_add_j2u_to_j2u.3 b/libj2_ju_add_j2u_to_j2u.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ju_add_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_add_j2u_to_j2u.c b/libj2_ju_add_j2u_to_j2u.c
index 60fff73..46e34f9 100644
--- a/libj2_ju_add_j2u_to_j2u.c
+++ b/libj2_ju_add_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ju_add_j2u_to_j2u(uintmax_t a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_add_j2u_to_j2u_overflow.3 b/libj2_ju_add_j2u_to_j2u_overflow.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ju_add_j2u_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_add_j2u_to_j2u_overflow.c b/libj2_ju_add_j2u_to_j2u_overflow.c
index d02dfee..00eb3ff 100644
--- a/libj2_ju_add_j2u_to_j2u_overflow.c
+++ b/libj2_ju_add_j2u_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_add_j2u_to_j2u_overflow(uintmax_t a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_add_ju_to_j2u.3 b/libj2_ju_add_ju_to_j2u.3
new file mode 120000
index 0000000..668244f
--- /dev/null
+++ b/libj2_ju_add_ju_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2i_add_j2i.3 \ No newline at end of file
diff --git a/libj2_ju_add_ju_to_j2u.c b/libj2_ju_add_ju_to_j2u.c
index 7622b84..4360938 100644
--- a/libj2_ju_add_ju_to_j2u.c
+++ b/libj2_ju_add_ju_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ju_add_ju_to_j2u(uintmax_t a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_sub_j2u_overflow_p.3 b/libj2_ju_sub_j2u_overflow_p.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_ju_sub_j2u_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_ju_sub_j2u_overflow_p.c b/libj2_ju_sub_j2u_overflow_p.c
index 90fe79c..5b57ae6 100644
--- a/libj2_ju_sub_j2u_overflow_p.c
+++ b/libj2_ju_sub_j2u_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_sub_j2u_overflow_p(uintmax_t a, const struct libj2_j2u *b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_sub_j2u_to_j2u.3 b/libj2_ju_sub_j2u_to_j2u.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_ju_sub_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_ju_sub_j2u_to_j2u.c b/libj2_ju_sub_j2u_to_j2u.c
index 6e85181..8a2c9e4 100644
--- a/libj2_ju_sub_j2u_to_j2u.c
+++ b/libj2_ju_sub_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ju_sub_j2u_to_j2u(uintmax_t a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_sub_j2u_to_j2u_overflow.3 b/libj2_ju_sub_j2u_to_j2u_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_ju_sub_j2u_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_ju_sub_j2u_to_j2u_overflow.c b/libj2_ju_sub_j2u_to_j2u_overflow.c
index 5fef105..29d226c 100644
--- a/libj2_ju_sub_j2u_to_j2u_overflow.c
+++ b/libj2_ju_sub_j2u_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_sub_j2u_to_j2u_overflow(uintmax_t a, const struct libj2_j2u *b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_sub_ju_overflow_p.3 b/libj2_ju_sub_ju_overflow_p.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_ju_sub_ju_overflow_p.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_ju_sub_ju_overflow_p.c b/libj2_ju_sub_ju_overflow_p.c
index 05bc298..be1964a 100644
--- a/libj2_ju_sub_ju_overflow_p.c
+++ b/libj2_ju_sub_ju_overflow_p.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_sub_ju_overflow_p(uintmax_t a, uintmax_t b);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_sub_ju_to_j2u.3 b/libj2_ju_sub_ju_to_j2u.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_ju_sub_ju_to_j2u.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_ju_sub_ju_to_j2u.c b/libj2_ju_sub_ju_to_j2u.c
index cedc6f3..93f682f 100644
--- a/libj2_ju_sub_ju_to_j2u.c
+++ b/libj2_ju_sub_ju_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_ju_sub_ju_to_j2u(uintmax_t a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_ju_sub_ju_to_j2u_overflow.3 b/libj2_ju_sub_ju_to_j2u_overflow.3
new file mode 120000
index 0000000..126e9a9
--- /dev/null
+++ b/libj2_ju_sub_ju_to_j2u_overflow.3
@@ -0,0 +1 @@
+libj2_j2u_sub_j2u.3 \ No newline at end of file
diff --git a/libj2_ju_sub_ju_to_j2u_overflow.c b/libj2_ju_sub_ju_to_j2u_overflow.c
index cd3c67b..11b16cf 100644
--- a/libj2_ju_sub_ju_to_j2u_overflow.c
+++ b/libj2_ju_sub_ju_to_j2u_overflow.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_ju_sub_ju_to_j2u_overflow(uintmax_t a, uintmax_t b, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_abs_j2i.3 b/libj2_minus_abs_j2i.3
new file mode 100644
index 0000000..f750ce3
--- /dev/null
+++ b/libj2_minus_abs_j2i.3
@@ -0,0 +1,55 @@
+.TH LIBJ2_MINUS_ABS_J2I 3 LIBJ2
+.SH NAME
+libj2_minus_abs_j2i \- Calculate the additive inverse of the absolute value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+void \fBlibj2_minus_abs_j2i\fP(struct libj2_j2i *\fIa\fP);
+void \fBlibj2_minus_abs_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2i *\fIr\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_minus_abs_j2i ()
+and
+.BR libj2_minus_abs_j2i_to_j2i ()
+functions calculate the additive inverse
+of the absolute value of
+.IR a .
+.PP
+The
+.BR libj2_minus_abs_j2i ()
+function stores the result in
+.IR a .
+.PP
+The
+.BR libj2_minus_abs_j2i_to_j2i ()
+function stores the result in
+.IR r .
+.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_minus_abs_j2i ()
+and
+.BR libj2_minus_abs_j2i_to_j2i ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_abs_j2i (3),
+.BR libj2_minus_j2i (3)
diff --git a/libj2_minus_abs_j2i.c b/libj2_minus_abs_j2i.c
index d2f56b4..1d3ab90 100644
--- a/libj2_minus_abs_j2i.c
+++ b/libj2_minus_abs_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_abs_j2i(struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_abs_j2i_to_j2i.3 b/libj2_minus_abs_j2i_to_j2i.3
new file mode 120000
index 0000000..2c9c672
--- /dev/null
+++ b/libj2_minus_abs_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_minus_abs_j2i.3 \ No newline at end of file
diff --git a/libj2_minus_abs_j2i_to_j2i.c b/libj2_minus_abs_j2i_to_j2i.c
index 8f41cab..d082049 100644
--- a/libj2_minus_abs_j2i_to_j2i.c
+++ b/libj2_minus_abs_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_abs_j2i_to_j2i(const struct libj2_j2i *a, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_j2i.3 b/libj2_minus_j2i.3
new file mode 100644
index 0000000..64aeda7
--- /dev/null
+++ b/libj2_minus_j2i.3
@@ -0,0 +1,99 @@
+.TH LIBJ2_MINUS_J2I 3 LIBJ2
+.SH NAME
+libj2_minus_j2i \- Additively inverse
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+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);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_minus_j2i ()
+and
+.BR libj2_minus_j2u ()
+functions additively inverse the value of
+.IR a .
+.PP
+The
+.BR libj2_minus_j2i_to_j2i (),
+.BR libj2_minus_j2i_to_j2u (),
+.BR libj2_minus_j2u_to_j2i (),
+and
+.BR libj2_minus_j2u_to_j2u (),
+functions calculate the additive inverse
+of the value of
+.I a
+and store the result in
+.IR r .
+.PP
+In the case that
+.I a
+is the minimum representable value, the
+calculation of the
+.BR libj2_minus_j2i ()
+and
+.BR libj2_minus_j2i_to_j2i ()
+functions overflow to the input value.
+.PP
+In the case that
+.I a
+is positive, the calculation of the
+.BR libj2_minus_j2i_to_j2u ()
+function technically overflows, however
+the result is as if
+.I a
+was converted to
+.B struct libj2_j2i
+and then inverted.
+.PP
+In the case that
+.I a
+has its most significant bit set in
+addition to at least one other bit,
+that is if
+.IR "libj2_co_j2u(a) > 1U && libj2_j2u_test_bit(a, LIBJ2_J2U_BIT - 1U)" ,
+the calculation of the
+.BR libj2_minus_j2u_to_j2i ()
+function overflows to the input value.
+.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_minus_j2u ()
+and
+.BR libj2_minus_j2u_to_j2u ()
+functions were added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_minus_j2i (),
+.BR libj2_minus_j2i_to_j2i (),
+.BR libj2_minus_j2i_to_j2u (),
+and
+.BR libj2_minus_j2u_to_j2i ()
+functions were added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_abs_j2i (3),
+.BR libj2_minus_abs_j2i (3)
diff --git a/libj2_minus_j2i.c b/libj2_minus_j2i.c
index 805afde..a1c0d62 100644
--- a/libj2_minus_j2i.c
+++ b/libj2_minus_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_j2i(struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_j2i_to_j2i.3 b/libj2_minus_j2i_to_j2i.3
new file mode 120000
index 0000000..824efb3
--- /dev/null
+++ b/libj2_minus_j2i_to_j2i.3
@@ -0,0 +1 @@
+libj2_minus_j2i.3 \ No newline at end of file
diff --git a/libj2_minus_j2i_to_j2i.c b/libj2_minus_j2i_to_j2i.c
index 01e559a..f0482be 100644
--- a/libj2_minus_j2i_to_j2i.c
+++ b/libj2_minus_j2i_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_j2i_to_j2i(const struct libj2_j2i *a, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_j2i_to_j2u.3 b/libj2_minus_j2i_to_j2u.3
new file mode 120000
index 0000000..824efb3
--- /dev/null
+++ b/libj2_minus_j2i_to_j2u.3
@@ -0,0 +1 @@
+libj2_minus_j2i.3 \ No newline at end of file
diff --git a/libj2_minus_j2i_to_j2u.c b/libj2_minus_j2i_to_j2u.c
index 5e570a5..46837d0 100644
--- a/libj2_minus_j2i_to_j2u.c
+++ b/libj2_minus_j2i_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_j2i_to_j2u(const struct libj2_j2i *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_j2u.3 b/libj2_minus_j2u.3
new file mode 120000
index 0000000..824efb3
--- /dev/null
+++ b/libj2_minus_j2u.3
@@ -0,0 +1 @@
+libj2_minus_j2i.3 \ No newline at end of file
diff --git a/libj2_minus_j2u.c b/libj2_minus_j2u.c
index f19c5b7..a141bbf 100644
--- a/libj2_minus_j2u.c
+++ b/libj2_minus_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_j2u(struct libj2_j2u *a);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_j2u_to_j2i.3 b/libj2_minus_j2u_to_j2i.3
new file mode 120000
index 0000000..824efb3
--- /dev/null
+++ b/libj2_minus_j2u_to_j2i.3
@@ -0,0 +1 @@
+libj2_minus_j2i.3 \ No newline at end of file
diff --git a/libj2_minus_j2u_to_j2i.c b/libj2_minus_j2u_to_j2i.c
index b453bfb..55a229a 100644
--- a/libj2_minus_j2u_to_j2i.c
+++ b/libj2_minus_j2u_to_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_j2u_to_j2i(const struct libj2_j2u *a, struct libj2_j2i *res);
-/* TODO Add man page */
#else
diff --git a/libj2_minus_j2u_to_j2u.3 b/libj2_minus_j2u_to_j2u.3
new file mode 120000
index 0000000..824efb3
--- /dev/null
+++ b/libj2_minus_j2u_to_j2u.3
@@ -0,0 +1 @@
+libj2_minus_j2i.3 \ No newline at end of file
diff --git a/libj2_minus_j2u_to_j2u.c b/libj2_minus_j2u_to_j2u.c
index 1198d4e..2339073 100644
--- a/libj2_minus_j2u_to_j2u.c
+++ b/libj2_minus_j2u_to_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline void libj2_minus_j2u_to_j2u(const struct libj2_j2u *a, struct libj2_j2u *res);
-/* TODO Add man page */
#else
diff --git a/libj2_sgn_j2i.3 b/libj2_sgn_j2i.3
new file mode 100644
index 0000000..6c48cac
--- /dev/null
+++ b/libj2_sgn_j2i.3
@@ -0,0 +1,58 @@
+.TH LIBJ2_SGN_J2I 3 LIBJ2
+.SH NAME
+libj2_sgn_j2i \- Get signum of value
+
+.SH SYNOPSIS
+.nf
+#include <libj2.h>
+
+int \fBlibj2_sgn_j2i\fP(const struct libj2_j2i *\fIa\fP);
+int \fBlibj2_sgn_j2u\fP(const struct libj2_j2u *\fIa\fP);
+.fi
+.PP
+Link with
+.IR -lj2 .
+
+.SH DESCRIPTION
+The
+.BR libj2_sgn_j2i ()
+and
+.BR libj2_sgn_j2u ()
+function compares
+.I a
+against zero, returning whether
+the value is positive, negative, or zero.
+.PP
+.I a
+is assumed to be
+.RI non- NULL .
+
+.SH RETURN VALUE
+The functions return -1 if the value of
+.I a
+is negative
+(impossible for the
+.BR libj2_sgn_j2u ()
+function), +1 if the value is positive,
+and 0 if zero.
+
+.SH ERRORS
+The functions cannot fail.
+
+.SH HISTORY
+The
+.BR libj2_sgn_j2u ()
+function was added in version 1.0 of
+.BR libj2 .
+.PP
+The
+.BR libj2_sgn_j2i ()
+function was added in version 1.1 of
+.BR libj2 .
+
+.SH SEE ALSO
+.BR libj2 (7),
+.BR libj2_j2i_cmp_j2i (3),
+.BR libj2_j2i_is_zero (3),
+.BR libj2_j2i_is_negative (3),
+.BR libj2_j2i_is_positive (3)
diff --git a/libj2_sgn_j2i.c b/libj2_sgn_j2i.c
index f2c0265..68cd2bd 100644
--- a/libj2_sgn_j2i.c
+++ b/libj2_sgn_j2i.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_sgn_j2i(const struct libj2_j2i *a);
-/* TODO Add man page */
#else
diff --git a/libj2_sgn_j2u.3 b/libj2_sgn_j2u.3
new file mode 120000
index 0000000..a300860
--- /dev/null
+++ b/libj2_sgn_j2u.3
@@ -0,0 +1 @@
+libj2_sgn_j2i.3 \ No newline at end of file
diff --git a/libj2_sgn_j2u.c b/libj2_sgn_j2u.c
index 5638388..22f3cdf 100644
--- a/libj2_sgn_j2u.c
+++ b/libj2_sgn_j2u.c
@@ -3,7 +3,6 @@
#ifndef TEST
extern inline int libj2_sgn_j2u(const struct libj2_j2u *a);
-/* TODO Add man page */
#else