aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--man0/libsimple.h.0274
-rw-r--r--man3/libsimple_memcasechr.31
-rw-r--r--man3/libsimple_memcasechr_inv.385
-rw-r--r--man3/libsimple_memcasescan.31
-rw-r--r--man3/libsimple_memcasescan_inv.387
-rw-r--r--man3/libsimple_memelem.32
-rw-r--r--man3/libsimple_memelem_inv.386
-rw-r--r--man3/libsimple_memelemscan.31
-rw-r--r--man3/libsimple_memelemscan_inv.388
-rw-r--r--man3/libsimple_memrcasechr.31
-rw-r--r--man3/libsimple_memrcasechr_inv.384
-rw-r--r--man3/libsimple_memrchr.33
-rw-r--r--man3/libsimple_memrchr_inv.384
-rw-r--r--man3/libsimple_memrelem.31
-rw-r--r--man3/libsimple_memrelem_inv.386
-rw-r--r--man3/libsimple_memscan.31
-rw-r--r--man3/libsimple_memscan_inv.387
-rw-r--r--man3/libsimple_rawmemcasechr.31
-rw-r--r--man3/libsimple_rawmemcasechr_inv.385
-rw-r--r--man3/libsimple_rawmemchr.31
-rw-r--r--man3/libsimple_rawmemchr_inv.384
-rw-r--r--man3/libsimple_rawmemrcasechr.31
-rw-r--r--man3/libsimple_rawmemrcasechr_inv.385
-rw-r--r--man3/libsimple_rawmemrchr.31
-rw-r--r--man3/libsimple_rawmemrchr_inv.385
-rw-r--r--man3/libsimple_strcasechrnul.31
-rw-r--r--man3/libsimple_strcasechrnul_inv.380
-rw-r--r--man3/libsimple_strchrnul.31
-rw-r--r--man3/libsimple_strchrnul_inv.380
-rw-r--r--man3/libsimple_strncasechrnul.31
-rw-r--r--man3/libsimple_strncasechrnul_inv.388
-rw-r--r--man3/libsimple_strnchrnul.31
-rw-r--r--man3/libsimple_strnchrnul_inv.388
l---------man3/memcasechr_inv.3libsimple1
l---------man3/memcasescan_inv.3libsimple1
l---------man3/memchr_inv.3libsimple1
l---------man3/memcmove.3libsimple1
l---------man3/memelem_inv.3libsimple1
l---------man3/memelemcpy.3libsimple1
l---------man3/memelemmove.3libsimple1
l---------man3/memelemscan_inv.3libsimple1
l---------man3/memptolower.3libsimple1
l---------man3/memptoupper.3libsimple1
l---------man3/memrcasechr_inv.3libsimple1
l---------man3/memrchr_inv.3libsimple1
l---------man3/memrelem_inv.3libsimple1
l---------man3/memreplace.3libsimple1
l---------man3/memreplaceelem.3libsimple1
l---------man3/memscan_inv.3libsimple1
l---------man3/memtolower.3libsimple1
l---------man3/memtoupper.3libsimple1
l---------man3/rawmemcasechr_inv.3libsimple1
l---------man3/rawmemccpy.3libsimple1
l---------man3/rawmemchr_inv.3libsimple1
l---------man3/rawmemcmove.3libsimple1
l---------man3/rawmemelem.3libsimple1
l---------man3/rawmemelem_inv.3libsimple1
l---------man3/rawmemelemcpy.3libsimple1
l---------man3/rawmemelemmove.3libsimple1
l---------man3/rawmemrcasechr_inv.3libsimple1
l---------man3/rawmemrchr_inv.3libsimple1
l---------man3/rawmemrelem.3libsimple1
l---------man3/rawmemrelem_inv.3libsimple1
l---------man3/stpnset.3libsimple1
l---------man3/stpntolower.3libsimple1
l---------man3/stpntoupper.3libsimple1
l---------man3/stpset.3libsimple1
l---------man3/stptolower.3libsimple1
l---------man3/stptoupper.3libsimple1
l---------man3/strcasechr_inv.3libsimple1
l---------man3/strcasechrnul_inv.3libsimple1
l---------man3/strccpy.3libsimple1
l---------man3/strchr_inv.3libsimple1
l---------man3/strchrnul_inv.3libsimple1
l---------man3/strcmove.3libsimple1
l---------man3/strncasechr_inv.3libsimple1
l---------man3/strncasechrnul_inv.3libsimple1
l---------man3/strnccpy.3libsimple1
l---------man3/strnchr_inv.3libsimple1
l---------man3/strnchrnul_inv.3libsimple1
l---------man3/strncmove.3libsimple1
l---------man3/strnreplace.3libsimple1
l---------man3/strnset.3libsimple1
l---------man3/strntolower.3libsimple1
l---------man3/strntoupper.3libsimple1
l---------man3/strrcasechr_inv.3libsimple1
l---------man3/strrchr_inv.3libsimple1
l---------man3/strreplace.3libsimple1
l---------man3/strrncasechr_inv.3libsimple1
l---------man3/strrnchr_inv.3libsimple1
l---------man3/strset.3libsimple1
l---------man3/strtolower.3libsimple1
l---------man3/strtoupper.3libsimple1
-rw-r--r--memcasechr_inv.c2
-rw-r--r--memcasescan_inv.c2
-rw-r--r--memelem_inv.c2
-rw-r--r--memelemscan_inv.c2
-rw-r--r--memrcasechr_inv.c2
-rw-r--r--memrchr_inv.c2
-rw-r--r--memrelem_inv.c2
-rw-r--r--memscan_inv.c2
-rw-r--r--rawmemcasechr_inv.c2
-rw-r--r--rawmemchr_inv.c2
-rw-r--r--rawmemrcasechr_inv.c2
-rw-r--r--rawmemrchr_inv.c2
-rw-r--r--strcasechrnul_inv.c2
-rw-r--r--strchrnul_inv.c2
-rw-r--r--strncasechrnul_inv.c2
-rw-r--r--strnchrnul_inv.c2
109 files changed, 1726 insertions, 21 deletions
diff --git a/man0/libsimple.h.0 b/man0/libsimple.h.0
index d3c018d..c9055d5 100644
--- a/man0/libsimple.h.0
+++ b/man0/libsimple.h.0
@@ -1,4 +1,4 @@
-.TH LIBSIMPLE.H 0 2018-11-16 libsimple
+.TH LIBSIMPLE.H 0 2018-11-24 libsimple
.SH NAME
libsimple.h \- main header for libsimple
.SH SYNOPSIS
@@ -520,6 +520,28 @@ Case-insensitive version of
.BR memcmp (3).
.TP
+.BR libsimple_memchr_inv (3),
+.RS 0
+.BR libsimple_memcasechr_inv (3)
+.RE
+.RS
+Find first byte that is different from a specified byte.
+.RE
+
+.TP
+.BR libsimple_memcmove (3),
+.RS 0
+.BR libsimple_rawmemcmove (3)
+.RE
+.RS
+Versions of
+.BR memccpy (3)
+and
+.BR libsimple_rawmemccpy (3)
+that allow overlap of the arrays.
+.RE
+
+.TP
.BR libsimple_memdup (3),
.RS 0
.BR libsimple_ememdup (3),
@@ -542,6 +564,33 @@ that operate on multibyte units
rather than simple bytes.
.TP
+.BR libsimple_memelem_inv (3)
+Version of
+.BR libsimple_memchr_inv (3)
+that operate on multibyte units
+rather than simple bytes.
+
+.TP
+.BR libsimple_memelemcpy (3),
+.RS 0
+.BR libsimple_rawmemelemcpy (3),
+.br
+.BR libsimple_memelemmove (3),
+.br
+.BR libsimple_rawmemelemmove (3)
+.RE
+.RS
+Versions of
+.BR memccpy (3),
+.BR libsimple_rawmemccpy (3),
+.BR libsimple_memcmove (3),
+and
+.BR libsimple_rawmemcmove (3)
+that that operate on multibyte units
+rather than simple bytes.
+.RE
+
+.TP
.BR libsimple_memelemscan (3)
Version of
.BR memscan (3)
@@ -549,6 +598,13 @@ that operate on multibyte units
rather than simple bytes.
.TP
+.BR libsimple_memelemscan_inv (3)
+Version of
+.BR libsimple_memscan_inv (3)
+that operate on multibyte units
+rather than simple bytes.
+
+.TP
.BR libsimple_memends (3),
.RS 0
.BR libsimple_memcaseends (3)
@@ -620,11 +676,38 @@ in an array of bytes.
.RE
.TP
+.BR libsimple_memrchr_inv (3),
+.RS 0
+.BR libsimple_memrcasechr_inv (3)
+.RE
+.RS
+Find the last byte that is different from a
+specified byte.
+.RE
+
+.TP
+.BR libsimple_memrelem_inv (3)
+Version of
+.BR libsimple_memrchr_inv (3)
+that operate on multibyte units
+rather than simple bytes.
+
+.TP
.BR libsimple_memrelem (3)
Find the last occurrence of a specific element
in an array.
.TP
+.BR libsimple_memreplace (3)
+Replace all occurrences of a byte with
+another byte.
+
+.TP
+.BR libsimple_memreplaceelem (3)
+Replace all occurrences of an element with
+another element.
+
+.TP
.BR libsimple_memreqlen (3),
.RS 0
.BR libsimple_memrcaseeqlen (3)
@@ -659,6 +742,15 @@ if the byte is not found.
.RE
.TP
+.BR libsimple_memscan_inv (3),
+.RS 0
+.BR libsimple_memcasescan_inv (3)
+.RE
+.RS
+Skip leading bytes.
+.RE
+
+.TP
.BR libsimple_memsetelem (3)
Fill en array.
@@ -831,15 +923,47 @@ allocation size and conditionally initialises the memory.
.RE
.TP
-.BR libsimple_rawmemchr (3)
+.BR libsimple_rawmemccpy (3)
+Version of
+.BR memccpy (3)
+with the optimising assumption that the
+byte actually exists in the array.
+
+.TP
+.BR libsimple_rawmemchr (3),
.RS 0
.BR libsimple_rawmemcasechr (3)
.RE
.RS
Find the first occurrence of a specific byte
in an array of bytes, with the optimising
-assumption that is actually exists in the array.
+assumption that it actually exists in the array.
+.RE
+
+.TP
+.BR libsimple_rawmemchr_inv (3),
+.RS 0
+.BR libsimple_rawmemcasechr_inv (3)
.RE
+.RS
+Find first byte that is different from a specified
+byte, with the optimising assumption that such a
+byte actually exists in the array.
+.RE
+
+.TP
+.BR libsimple_rawmemelem (3)
+Version of
+.BR libsimple_memelem (3),
+with the optimising assumption that the
+element actually exists in the array.
+
+.TP
+.BR libsimple_rawmemelem_inv (3)
+Version of
+.BR libsimple_memelem_inv (3)
+with the optimising assumption that such a
+element actually exists in the array.
.TP
.BR libsimple_rawmemrchr (3)
@@ -849,7 +973,32 @@ assumption that is actually exists in the array.
.RS
Find the last occurrence of a specific byte
in an array of bytes, with the optimising
-assumption that is actually exists in the array.
+assumption that it actually exists in the array.
+.RE
+
+.TP
+.BR libsimple_rawmemrchr_inv (3),
+.RS 0
+.BR libsimple_rawmemrcasechr_inv (3)
+.RE
+.RS
+Find last byte that is different from a specified
+byte, with the optimising assumption that such a
+byte actually exists in the array.
+
+.TP
+.BR libsimple_rawmemrelem (3)
+Version of
+.BR libsimple_memrelem (3),
+with the optimising assumption that the
+element actually exists in the array.
+
+.TP
+.BR libsimple_rawmemrelem_inv (3)
+Version of
+.BR libsimple_memrelem_inv (3),
+with the optimising assumption that such a
+element actually exists in the array.
.RE
.TP
@@ -894,6 +1043,30 @@ Case-insensitive version of
.BR strstr (3).
.TP
+.BR libsimple_strccpy (3),
+.RS 0
+.BR libsimple_strnccpy (3)
+.RE
+.RS
+Copy a string but stop after the first
+occurrence of a specified character.
+.RE
+
+.TP
+.BR libsimple_strchr_inv (3),
+.RS 0
+.BR libsimple_strcasechr_inv (3),
+.br
+.BR libsimple_strnchr_inv (3),
+.br
+.BR libsimple_strncasechr_inv (3)
+.RE
+.RS
+Find the first character that is different
+from a specified character.
+.RE
+
+.TP
.BR libsimple_strchrnul (3),
.RS 0
.BR libsimple_strcasechrnul (3),
@@ -914,6 +1087,29 @@ string if the byte is not found.
.RE
.TP
+.BR libsimple_strchrnul_inv (3),
+.RS 0
+.BR libsimple_strcasechrnul_inv (3),
+.br
+.BR libsimple_strnchrnul_inv (3),
+.br
+.BR libsimple_strncasechrnul_inv (3)
+.RE
+.RS
+Skip leading characters.
+.RE
+
+.TP
+.BR libsimple_strcmove (3),
+.RS 0
+.BR libsimple_strncmove (3)
+.RE
+.RS
+Move a string but stop after the first
+occurrence of a specified character.
+.RE
+
+.TP
.BR libsimple_strcmpnul (3),
.RS 0
.BR libsimple_strcasecmpnul (3),
@@ -1090,6 +1286,29 @@ Case-insensitive version of the
.BR strrchr (3).
.TP
+.BR libsimple_strrchrnul_inv (3),
+.RS 0
+.BR libsimple_strrcasechrnul_inv (3),
+.br
+.BR libsimple_strrnchrnul_inv (3),
+.br
+.BR libsimple_strrncasechrnul_inv (3)
+.RE
+.RS
+Skip trailing characters.
+.RE
+
+.TP
+.BR libsimple_strreplace (3),
+.RS 0
+.BR libsimple_strnreplace (3)
+.RE
+.RS
+Replace all occurrences of a character with
+another character.
+.RE
+
+.TP
.BR libsimple_strreqlen (3),
.RS 0
.BR libsimple_strrcaseeqlen (3),
@@ -1130,6 +1349,19 @@ Find the last occurrence of a substring.
.RE
.TP
+.BR libsimple_stpnset (3),
+.RS 0
+.BR libsimple_stpset (3),
+.br
+.BR libsimple_strnset (3),
+.br
+.BR libsimple_strset (3)
+.RE
+.RS
+Fill a string a with character.
+.RE
+
+.TP
.BR libsimple_strstarts (3),
.RS 0
.BR libsimple_strcasestarts (3),
@@ -1143,6 +1375,23 @@ Check the beginning if a string.
.RE
.TP
+.BR libsimple_strtolower (3),
+.RS 0
+.BR libsimple_strntolower (3),
+.br
+.BR libsimple_memtolower (3),
+.br
+.BR libsimple_stptolower (3),
+.br
+.BR libsimple_stpntolower (3),
+.br
+.BR libsimple_memptolower (3)
+.RE
+.RS
+Convert a string to lower case.
+.RE
+
+.TP
.BR libsimple_strtotimespec (3),
.RS 0
.BR libsimple_strtotimeval (3)
@@ -1154,6 +1403,23 @@ a duration.
.RE
.TP
+.BR libsimple_strtoupper (3),
+.RS 0
+.BR libsimple_strntoupper (3),
+.br
+.BR libsimple_memtoupper (3),
+.br
+.BR libsimple_stptoupper (3),
+.br
+.BR libsimple_stpntoupper (3),
+.br
+.BR libsimple_memptoupper (3)
+.RE
+.RS
+Convert a string to upper case.
+.RE
+
+.TP
.BR libsimple_sumtimespec (3),
.RS 0
.BR libsimple_sumtimeval (3)
diff --git a/man3/libsimple_memcasechr.3 b/man3/libsimple_memcasechr.3
index 5c6e5d9..d06a6d8 100644
--- a/man3/libsimple_memcasechr.3
+++ b/man3/libsimple_memcasechr.3
@@ -75,6 +75,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memcasechr_inv (3),
.BR libsimple_memrcasechr (3),
.BR libsimple_rawmemcasechr (3),
.BR libsimple_memcasemem (3),
diff --git a/man3/libsimple_memcasechr_inv.3 b/man3/libsimple_memcasechr_inv.3
new file mode 100644
index 0000000..e14d7d4
--- /dev/null
+++ b/man3/libsimple_memcasechr_inv.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_MEMCASECHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memcasechr_inv \- find different byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memcasechr_inv(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memcasechr_inv
+# define memcasechr_inv libsimple_memcasechr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcasechr_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the first occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcasechr_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)!=tolower(c) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memcasechr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcasechr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcasechr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcasechr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcasechr (3),
+.BR libsimple_memchr_inv (3),
+.BR libsimple_memrcasechr_inv (3),
+.BR libsimple_rawmemcasechr_inv (3),
+.BR libsimple_memcasescan_inv (3),
+.BR libsimple_strncasechr_inv (3),
+.BR libsimple_strcasechr_inv (3)
diff --git a/man3/libsimple_memcasescan.3 b/man3/libsimple_memcasescan.3
index 9c11c2e..7479a05 100644
--- a/man3/libsimple_memcasescan.3
+++ b/man3/libsimple_memcasescan.3
@@ -77,6 +77,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memcasescan_inv (3),
.BR libsimple_memscan (3),
.BR libsimple_memcasechr (3),
.BR libsimple_memrcasechr (3),
diff --git a/man3/libsimple_memcasescan_inv.3 b/man3/libsimple_memcasescan_inv.3
new file mode 100644
index 0000000..f58c222
--- /dev/null
+++ b/man3/libsimple_memcasescan_inv.3
@@ -0,0 +1,87 @@
+.TH LIBSIMPLE_MEMCASESCAN_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memcasescan_inv \- skip byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memcasescan_inv(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memcasescan_inv
+# define memcasescan_inv libsimple_memcasescan_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memcasescan_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the first occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the memory
+segment, the memory segment's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memcasescan_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)!=tolower(c) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.I &s[n]
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memcasescan_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memcasescan_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memcasescan_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memcasescan_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memcasescan (3),
+.BR libsimple_memscan_inv (3),
+.BR libsimple_memcasechr_inv (3),
+.BR libsimple_memrcasechr_inv (3),
+.BR libsimple_rawmemcasechr_inv (3),
+.BR libsimple_strncasechrnul_inv (3),
+.BR libsimple_strcasechrnul_inv (3)
diff --git a/man3/libsimple_memelem.3 b/man3/libsimple_memelem.3
index 6eb3c0b..e1189b3 100644
--- a/man3/libsimple_memelem.3
+++ b/man3/libsimple_memelem.3
@@ -79,7 +79,9 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memelem_inv (3),
.BR libsimple_memelemscan (3),
.BR libsimple_memrelem (3),
+.BR libsimple_rawmemelem (3),
.BR libsimple_memmem (3),
.BR memchr (3)
diff --git a/man3/libsimple_memelem_inv.3 b/man3/libsimple_memelem_inv.3
new file mode 100644
index 0000000..a36e38c
--- /dev/null
+++ b/man3/libsimple_memelem_inv.3
@@ -0,0 +1,86 @@
+.TH LIBSIMPLE_MEMELEM_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memelem_inv \- find different aligned byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memelem_inv(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memelem_inv
+# define memelem_inv libsimple_memelem_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memelem_inv ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack*nneedle ,
+for the first occurence of a byte string
+different from
+.I needle
+with the size
+.IR nneedle ,
+and with an offset equivalent to zero modulo
+.IR nneedle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memelem_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer, and such that
+the offset is equivalent to zero modulo
+.IR nneedle .
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memelem_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memelem_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memelem_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memelem_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memelem (3),
+.BR libsimple_memelemscan_inv (3),
+.BR libsimple_memrelem_inv (3),
+.BR libsimple_rawmemelem_inv (3)
diff --git a/man3/libsimple_memelemscan.3 b/man3/libsimple_memelemscan.3
index de70105..727c44a 100644
--- a/man3/libsimple_memelemscan.3
+++ b/man3/libsimple_memelemscan.3
@@ -81,6 +81,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memelemscan_inv (3),
.BR libsimple_memelem (3),
.BR libsimple_memrelem (3),
.BR libsimple_memmem (3),
diff --git a/man3/libsimple_memelemscan_inv.3 b/man3/libsimple_memelemscan_inv.3
new file mode 100644
index 0000000..77f7119
--- /dev/null
+++ b/man3/libsimple_memelemscan_inv.3
@@ -0,0 +1,88 @@
+.TH LIBSIMPLE_MEMELEMSCAN_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memelemscan_inv \- skip aligned byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memelemscan_inv(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memelemscan_inv
+# define memelemscan_inv libsimple_memelemscan_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memelemscan_inv ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack*nneedle ,
+for the first occurence of a byte string
+different from
+.I needle
+with the size
+.IR nneedle ,
+and with an offset equivalent to zero modulo
+.IR nneedle .
+If no such character exist in the memory
+segment, the memory segment's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memelemscan_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer, and such that
+the offset is equivalent to zero modulo
+.IR nneedle .
+If no such offset exists,
+.I (void *)&((char *)haystack)[nhaystack*nneedle]
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memelemscan_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memelemscan_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memelemscan_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memelemscan_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memelemscan (3),
+.BR libsimple_memelem_inv (3),
+.BR libsimple_memrelem_inv (3),
+.BR libsimple_memchrscan_inv (3)
diff --git a/man3/libsimple_memrcasechr.3 b/man3/libsimple_memrcasechr.3
index 100f938..5bb60b4 100644
--- a/man3/libsimple_memrcasechr.3
+++ b/man3/libsimple_memrcasechr.3
@@ -75,6 +75,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memrcasechr_inv (3),
.BR libsimple_memcasechr (3),
.BR libsimple_memrchr (3),
.BR libsimple_rawmemrcasechr (3),
diff --git a/man3/libsimple_memrcasechr_inv.3 b/man3/libsimple_memrcasechr_inv.3
new file mode 100644
index 0000000..c5936a7
--- /dev/null
+++ b/man3/libsimple_memrcasechr_inv.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_MEMRCASECHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memrcasechr_inv \- find byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrcasechr_inv(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memrcasechr_inv
+# define memrcasechr_inv libsimple_memrcasechr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrcasechr_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrcasechr_inv ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR tolower(*r)!=tolower(c) ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrcasechr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrcasechr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrcasechr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrcasechr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrcasechr (3),
+.BR libsimple_memcasechr_inv (3),
+.BR libsimple_memrchr_inv (3),
+.BR libsimple_rawmemrcasechr_inv (3),
+.BR libsimple_strrncasechr_inv (3),
+.BR libsimple_strrcasechr_inv (3)
diff --git a/man3/libsimple_memrchr.3 b/man3/libsimple_memrchr.3
index 362c8ba..71d0c0a 100644
--- a/man3/libsimple_memrchr.3
+++ b/man3/libsimple_memrchr.3
@@ -75,9 +75,10 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memrchr_inv (3),
.BR libsimple_memrcasechr (3),
.BR libsimple_rawmemrchr (3),
.BR libsimple_memrmem (3),
.BR libsimple_strrnchr (3),
-.BR memchr (3)
+.BR memchr (3),
.BR strrchr (3)
diff --git a/man3/libsimple_memrchr_inv.3 b/man3/libsimple_memrchr_inv.3
new file mode 100644
index 0000000..d498245
--- /dev/null
+++ b/man3/libsimple_memrchr_inv.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_MEMRCHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memrchr_inv \- find different byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrchr_inv(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memrchr_inv
+# define memrchr_inv libsimple_memrchr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrchr_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrchr_inv ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR *r!=c ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrchr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrchr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrchr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrchr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrchr (3),
+.BR libsimple_memchr_inv (3),
+.BR libsimple_memrcasechr_inv (3),
+.BR libsimple_rawmemrchr_inv (3),
+.BR libsimple_strrnchr_inv (3),
+.BR libsimple_strrchr_inv (3)
diff --git a/man3/libsimple_memrelem.3 b/man3/libsimple_memrelem.3
index 203ffee..3718b19 100644
--- a/man3/libsimple_memrelem.3
+++ b/man3/libsimple_memrelem.3
@@ -79,6 +79,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memrelem_inv (3),
.BR libsimple_memelem (3),
.BR libsimple_memrmem (3),
.BR libsimple_memrchr (3)
diff --git a/man3/libsimple_memrelem_inv.3 b/man3/libsimple_memrelem_inv.3
new file mode 100644
index 0000000..71618c2
--- /dev/null
+++ b/man3/libsimple_memrelem_inv.3
@@ -0,0 +1,86 @@
+.TH LIBSIMPLE_MEMRELEM_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memrelem_inv \- find different aligned byte string in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memrelem_inv(const void *\fIhaystack\fP, size_t \fInhaystack\fP, const void *\fIneedle\fP, size_t \fInneedle\fP);
+
+#ifndef memrelem_inv
+# define memrelem_inv libsimple_memrelem_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memrelem_inv ()
+function scans the memory segment
+.IR haystack ,
+with the size
+.IR nhaystack*nneedle ,
+for the last occurence of a byte string
+different from
+.I needle
+with the size
+.IR nneedle ,
+and with an offset equivalent to zero modulo
+.IR nneedle .
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memrelem_inv ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR memcmp(r,needle,nneedle) ,
+where
+.I r
+is the returned pointer, and such that
+the offset is equivalent to zero modulo
+.IR nneedle .
+If no such offset exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memrelem_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memrelem_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memrelem_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memrelem_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memrelem (3),
+.BR libsimple_memelem_inv (3),
+.BR libsimple_memrmem_inv (3),
+.BR libsimple_memrchr_inv (3)
diff --git a/man3/libsimple_memscan.3 b/man3/libsimple_memscan.3
index 0c5d14a..1d85c6a 100644
--- a/man3/libsimple_memscan.3
+++ b/man3/libsimple_memscan.3
@@ -77,6 +77,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_memscan_inv (3),
.BR libsimple_memcasescan (3),
.BR libsimple_memrchr (3),
.BR libsimple_rawmemchr (3),
diff --git a/man3/libsimple_memscan_inv.3 b/man3/libsimple_memscan_inv.3
new file mode 100644
index 0000000..39a6071
--- /dev/null
+++ b/man3/libsimple_memscan_inv.3
@@ -0,0 +1,87 @@
+.TH LIBSIMPLE_MEMSCAN_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_memscan_inv \- skip byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_memscan_inv(const void *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef memscan_inv
+# define memscan_inv libsimple_memscan_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_memscan_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the first occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the memory
+segment, the memory segment's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_memscan_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r!=c ,
+where
+.I r
+is the returned pointer.
+If no such offset exists,
+.I &r[n]
+is returned.
+.SH ERRORS
+The
+.BR libsimple_memscan_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_memscan_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_memscan_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_memscan_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_memscan (3),
+.BR libsimple_memchr_inv (3),
+.BR libsimple_memcasescan_inv (3),
+.BR libsimple_memrchr_inv (3),
+.BR libsimple_rawmemchr_inv (3),
+.BR libsimple_strnchrnul_inv (3),
+.BR libsimple_strchrnul_inv (3)
diff --git a/man3/libsimple_rawmemcasechr.3 b/man3/libsimple_rawmemcasechr.3
index 308ea91..455a818 100644
--- a/man3/libsimple_rawmemcasechr.3
+++ b/man3/libsimple_rawmemcasechr.3
@@ -76,6 +76,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_rawmemcasechr_inv (3),
.BR libsimple_memcasechr (3),
.BR libsimple_rawmemchr (3),
.BR libsimple_rawmemrcasechr (3),
diff --git a/man3/libsimple_rawmemcasechr_inv.3 b/man3/libsimple_rawmemcasechr_inv.3
new file mode 100644
index 0000000..f5241a2
--- /dev/null
+++ b/man3/libsimple_rawmemcasechr_inv.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_RAWMEMCASECHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_rawmemcasechr_inv \- find different byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemcasechr_inv(const void *\fIs\fP, int \fIc\fP);
+
+#ifndef rawmemcasechr_inv
+# define rawmemcasechr_inv libsimple_rawmemcasechr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemcasechr_inv ()
+function scans the memory segment
+.I s
+for the first occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemcasechr_inv ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemcasechr_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)!=tolower(c) ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemcasechr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemcasechr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemcasechr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemcasechr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemcasechr (3),
+.BR libsimple_memcasechr_inv (3),
+.BR libsimple_rawmemchr_inv (3),
+.BR libsimple_rawmemrcasechr_inv (3),
+.BR libsimple_memcasescan_inv (3),
+.BR libsimple_memcasechr_inv (3)
diff --git a/man3/libsimple_rawmemchr.3 b/man3/libsimple_rawmemchr.3
index 3cf13dd..1df9b02 100644
--- a/man3/libsimple_rawmemchr.3
+++ b/man3/libsimple_rawmemchr.3
@@ -76,6 +76,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_rawmemchr_inv (3),
.BR libsimple_rawmemcasechr (3),
.BR libsimple_rawmemrchr (3),
.BR libsimple_memscan (3),
diff --git a/man3/libsimple_rawmemchr_inv.3 b/man3/libsimple_rawmemchr_inv.3
new file mode 100644
index 0000000..011e957
--- /dev/null
+++ b/man3/libsimple_rawmemchr_inv.3
@@ -0,0 +1,84 @@
+.TH LIBSIMPLE_RAWMEMCHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_rawmemchr_inv \- find different byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemchr_inv(const void *\fIs\fP, int \fIc\fP);
+
+#ifndef rawmemchr_inv
+# define rawmemchr_inv libsimple_rawmemchr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemchr_inv ()
+function scans the memory segment
+.I s
+for the first occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemchr_inv ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemchr_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r!=c ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemchr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemchr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemchr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemchr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemchr (3),
+.BR libsimple_memchr_inv (3),
+.BR libsimple_rawmemcasechr_inv (3),
+.BR libsimple_rawmemrchr_inv (3),
+.BR libsimple_memscan_inv (3)
diff --git a/man3/libsimple_rawmemrcasechr.3 b/man3/libsimple_rawmemrcasechr.3
index 389b332..2959691 100644
--- a/man3/libsimple_rawmemrcasechr.3
+++ b/man3/libsimple_rawmemrcasechr.3
@@ -78,6 +78,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_rawmemrcasechr_inv (3),
.BR libsimple_rawmemrchr (3),
.BR libsimple_memrcasechr (3),
.BR libsimple_rawmemcasechr (3)
diff --git a/man3/libsimple_rawmemrcasechr_inv.3 b/man3/libsimple_rawmemrcasechr_inv.3
new file mode 100644
index 0000000..060779d
--- /dev/null
+++ b/man3/libsimple_rawmemrcasechr_inv.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_RAWMEMRCASECHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_rawmemrcasechr_inv \- find different byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemrcasechr_inv(const void *s, int c, size_t n);
+
+#ifndef rawmemrcasechr_inv
+# define rawmemrcasechr_inv libsimple_rawmemrcasechr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemrcasechr_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemrcasechr_inv ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemrcasechr_inv ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR tolower(*r)!=tolower(c) ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemrcasechr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemrcasechr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemrcasechr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemrcasechr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemrcasechr (3),
+.BR libsimple_rawmemrchr_inv (3),
+.BR libsimple_memrcasechr_inv (3),
+.BR libsimple_rawmemcasechr_inv (3)
diff --git a/man3/libsimple_rawmemrchr.3 b/man3/libsimple_rawmemrchr.3
index f4ae624..5bf0fd6 100644
--- a/man3/libsimple_rawmemrchr.3
+++ b/man3/libsimple_rawmemrchr.3
@@ -78,6 +78,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_rawmemrchr_inv (3),
.BR libsimple_rawmemrcasechr (3),
.BR libsimple_memrchr (3),
.BR libsimple_rawmemchr (3)
diff --git a/man3/libsimple_rawmemrchr_inv.3 b/man3/libsimple_rawmemrchr_inv.3
new file mode 100644
index 0000000..28bd733
--- /dev/null
+++ b/man3/libsimple_rawmemrchr_inv.3
@@ -0,0 +1,85 @@
+.TH LIBSIMPLE_RAWMEMRCHR_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_rawmemrchr_inv \- find different byte in memory
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+void *libsimple_rawmemrchr_inv(const void *s, int c, size_t n);
+
+#ifndef rawmemrchr_inv
+# define rawmemrchr_inv libsimple_rawmemrchr_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_rawmemrchr_inv ()
+function scans the memory segment
+.IR s ,
+with the size
+.IR n ,
+for the last occurence of any byte
+other than
+.I c
+(it is converted to a
+.BR char ).
+.PP
+The
+.BR libsimple_rawmemrchr_inv ()
+function assumes there is at least one
+occurence, its behaviour is undefined
+if this is not the case.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_rawmemrchr_inv ()
+function returns the pointer
+.I s
+with a maximal offset such that
+.IR *r!=c ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_rawmemrchr_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_rawmemrchr_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_rawmemrchr_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_rawmemrchr_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_rawmemrchr (3),
+.BR libsimple_rawmemrcasechr_inv (3),
+.BR libsimple_memrchr_inv (3),
+.BR libsimple_rawmemchr_inv (3)
diff --git a/man3/libsimple_strcasechrnul.3 b/man3/libsimple_strcasechrnul.3
index 4f4badc..08dbce4 100644
--- a/man3/libsimple_strcasechrnul.3
+++ b/man3/libsimple_strcasechrnul.3
@@ -72,6 +72,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_strcasechrnul_inv (3),
.BR libsimple_strcasechr (3),
.BR libsimple_strchrnul (3),
.BR libsimple_strncasechrnul (3),
diff --git a/man3/libsimple_strcasechrnul_inv.3 b/man3/libsimple_strcasechrnul_inv.3
new file mode 100644
index 0000000..61c8179
--- /dev/null
+++ b/man3/libsimple_strcasechrnul_inv.3
@@ -0,0 +1,80 @@
+.TH LIBSIMPLE_STRCASECHRNUL_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_strcasechrnul_inv \- skip a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strcasechrnul_inv(const char *\fIs\fP, int \fIc\fP);
+
+#ifndef strcasechrnul_inv
+# define strcasechrnul_inv libsimple_strcasechrnul_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strcasechrnul_inv ()
+function scans the string
+.I s
+for the first occurence of any character
+other than
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strcasechrnul_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)!=tolower(c)||!*r ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_strcasechrnul_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strcasechrnul_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strcasechrnul_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strcasechrnul_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strcasechrnul (3),
+.BR libsimple_strcasechr_inv (3),
+.BR libsimple_strchrnul_inv (3),
+.BR libsimple_strncasechrnul_inv (3),
+.BR libsimple_memcasescan_inv (3)
diff --git a/man3/libsimple_strchrnul.3 b/man3/libsimple_strchrnul.3
index 846895b..ed54f0b 100644
--- a/man3/libsimple_strchrnul.3
+++ b/man3/libsimple_strchrnul.3
@@ -72,6 +72,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_charstrnul_inv (3),
.BR libsimple_strcasechrnul (3),
.BR libsimple_strend (3),
.BR libsimple_strnchrnul (3),
diff --git a/man3/libsimple_strchrnul_inv.3 b/man3/libsimple_strchrnul_inv.3
new file mode 100644
index 0000000..4664d1a
--- /dev/null
+++ b/man3/libsimple_strchrnul_inv.3
@@ -0,0 +1,80 @@
+.TH LIBSIMPLE_STRCHRNUL_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_strchrnul_inv \- skip a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strchrnul_inv(const char *\fIs\fP, int \fIc\fP);
+
+#ifndef strchrnul_inv
+# define strchrnul_inv libsimple_strchrnul_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strchrnul_inv ()
+function scans the string
+.I s
+for the first occurence of any character
+other than
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strchrnul_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r!=c||!*r ,
+where
+.I r
+is the returned pointer.
+.SH ERRORS
+The
+.BR libsimple_strchrnul_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strchrnul_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strchrnul_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strchrnul_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_charstrnul (3),
+.BR libsimple_strchr_inv (3),
+.BR libsimple_strcasechrnul_inv (3),
+.BR libsimple_strnchrnul_inv (3),
+.BR libsimple_memscan_inv (3)
diff --git a/man3/libsimple_strncasechrnul.3 b/man3/libsimple_strncasechrnul.3
index ed0fa03..d73f186 100644
--- a/man3/libsimple_strncasechrnul.3
+++ b/man3/libsimple_strncasechrnul.3
@@ -80,6 +80,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_strncasechrnul_inv (3),
.BR libsimple_strncasechr (3),
.BR libsimple_strnchrnul (3),
.BR libsimple_strcasechrnul (3),
diff --git a/man3/libsimple_strncasechrnul_inv.3 b/man3/libsimple_strncasechrnul_inv.3
new file mode 100644
index 0000000..48cced8
--- /dev/null
+++ b/man3/libsimple_strncasechrnul_inv.3
@@ -0,0 +1,88 @@
+.TH LIBSIMPLE_STRNCASECHRNUL_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_strncasechrnul_inv \- skip a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strncasechrnul_inv(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strncasechrnul_inv
+# define strncasechrnul_inv libsimple_strncasechrnul_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strncasechrnul_inv ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the first occurence of any character
+other than
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-insensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strncasechrnul_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR tolower(*r)!=tolower(c)||!*r ,
+where
+.I r
+is the returned pointer. However if no such
+offset less than
+.I n
+exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strncasechrnul_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strncasechrnul_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strncasechrnul_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strncasechrnul_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_strncasechrnul (3),
+.BR libsimple_strncasechr_inv (3),
+.BR libsimple_strnchrnul_inv (3),
+.BR libsimple_strcasechrnul_inv (3),
+.BR libsimple_memcasescan_inv (3)
diff --git a/man3/libsimple_strnchrnul.3 b/man3/libsimple_strnchrnul.3
index 6a26bd2..b0c328e 100644
--- a/man3/libsimple_strnchrnul.3
+++ b/man3/libsimple_strnchrnul.3
@@ -80,6 +80,7 @@ None.
.SH BUGS
None. I promise!
.SH SEE ALSO
+.BR libsimple_strnchrnul_inv (3),
.BR libsimple_strncasechrnul (3),
.BR libsimple_strnchr (3),
.BR libsimple_strnend (3),
diff --git a/man3/libsimple_strnchrnul_inv.3 b/man3/libsimple_strnchrnul_inv.3
new file mode 100644
index 0000000..d11a7df
--- /dev/null
+++ b/man3/libsimple_strnchrnul_inv.3
@@ -0,0 +1,88 @@
+.TH LIBSIMPLE_STRNCHRNUL_INV 3 2018-11-24 libsimple
+.SH NAME
+libsimple_strnchrnul_inv \- skip a character in a string
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+char *libsimple_strnchrnul_inv(const char *\fIs\fP, int \fIc\fP, size_t \fIn\fP);
+
+#ifndef strnchrnul_inv
+# define strnchrnul_inv libsimple_strnchrnul_inv
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_strnchrnul_inv ()
+function scans the string
+.IR s ,
+truncated to
+.I n
+bytes unless it is shorter,
+for the first occurence of any character
+other than
+.I c
+(it is converted to a
+.BR char ).
+If no such character exist in the string,
+the string's end is returned.
+.PP
+The comparison is case-sensitive.
+.SH RETURN VALUE
+The
+.BR libsimple_strnchrnul_inv ()
+function returns the pointer
+.I s
+with a minimal offset such that
+.IR *r!=c||!*r ,
+where
+.I r
+is the returned pointer. However if no such
+offset less than
+.I n
+exists,
+.B NULL
+is returned.
+.SH ERRORS
+The
+.BR libsimple_strnchrnul_inv ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_strnchrnul_inv ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_strnchrnul_inv ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_strnchrnul_inv ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None. I promise!
+.SH SEE ALSO
+.BR libsimple_strnchrnul (3),
+.BR libsimple_strncasechrnul_inv (3),
+.BR libsimple_strnchr_inv (3),
+.BR libsimple_strchrnul_inv (3),
+.BR libsimple_memscan_inv (3)
diff --git a/man3/memcasechr_inv.3libsimple b/man3/memcasechr_inv.3libsimple
new file mode 120000
index 0000000..99be9cc
--- /dev/null
+++ b/man3/memcasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memcasechr_inv.3 \ No newline at end of file
diff --git a/man3/memcasescan_inv.3libsimple b/man3/memcasescan_inv.3libsimple
new file mode 120000
index 0000000..d7eb34e
--- /dev/null
+++ b/man3/memcasescan_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memcasescan_inv.3 \ No newline at end of file
diff --git a/man3/memchr_inv.3libsimple b/man3/memchr_inv.3libsimple
new file mode 120000
index 0000000..3a91a50
--- /dev/null
+++ b/man3/memchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memchr_inv.3 \ No newline at end of file
diff --git a/man3/memcmove.3libsimple b/man3/memcmove.3libsimple
new file mode 120000
index 0000000..1b8f6d3
--- /dev/null
+++ b/man3/memcmove.3libsimple
@@ -0,0 +1 @@
+libsimple_memcmove.3 \ No newline at end of file
diff --git a/man3/memelem_inv.3libsimple b/man3/memelem_inv.3libsimple
new file mode 120000
index 0000000..ff54160
--- /dev/null
+++ b/man3/memelem_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memelem_inv.3 \ No newline at end of file
diff --git a/man3/memelemcpy.3libsimple b/man3/memelemcpy.3libsimple
new file mode 120000
index 0000000..2f870a9
--- /dev/null
+++ b/man3/memelemcpy.3libsimple
@@ -0,0 +1 @@
+libsimple_memelemcpy.3 \ No newline at end of file
diff --git a/man3/memelemmove.3libsimple b/man3/memelemmove.3libsimple
new file mode 120000
index 0000000..39a740f
--- /dev/null
+++ b/man3/memelemmove.3libsimple
@@ -0,0 +1 @@
+libsimple_memelemmove.3 \ No newline at end of file
diff --git a/man3/memelemscan_inv.3libsimple b/man3/memelemscan_inv.3libsimple
new file mode 120000
index 0000000..1683f76
--- /dev/null
+++ b/man3/memelemscan_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memelemscan_inv.3 \ No newline at end of file
diff --git a/man3/memptolower.3libsimple b/man3/memptolower.3libsimple
new file mode 120000
index 0000000..4ecb8ff
--- /dev/null
+++ b/man3/memptolower.3libsimple
@@ -0,0 +1 @@
+libsimple_memptolower.3 \ No newline at end of file
diff --git a/man3/memptoupper.3libsimple b/man3/memptoupper.3libsimple
new file mode 120000
index 0000000..332241c
--- /dev/null
+++ b/man3/memptoupper.3libsimple
@@ -0,0 +1 @@
+libsimple_memptoupper.3 \ No newline at end of file
diff --git a/man3/memrcasechr_inv.3libsimple b/man3/memrcasechr_inv.3libsimple
new file mode 120000
index 0000000..53e37ba
--- /dev/null
+++ b/man3/memrcasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memrcasechr_inv.3 \ No newline at end of file
diff --git a/man3/memrchr_inv.3libsimple b/man3/memrchr_inv.3libsimple
new file mode 120000
index 0000000..8cbfb6a
--- /dev/null
+++ b/man3/memrchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memrchr_inv.3 \ No newline at end of file
diff --git a/man3/memrelem_inv.3libsimple b/man3/memrelem_inv.3libsimple
new file mode 120000
index 0000000..e5cfd06
--- /dev/null
+++ b/man3/memrelem_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memrelem_inv.3 \ No newline at end of file
diff --git a/man3/memreplace.3libsimple b/man3/memreplace.3libsimple
new file mode 120000
index 0000000..0dd69a9
--- /dev/null
+++ b/man3/memreplace.3libsimple
@@ -0,0 +1 @@
+libsimple_memreplace.3 \ No newline at end of file
diff --git a/man3/memreplaceelem.3libsimple b/man3/memreplaceelem.3libsimple
new file mode 120000
index 0000000..b2a83b2
--- /dev/null
+++ b/man3/memreplaceelem.3libsimple
@@ -0,0 +1 @@
+libsimple_memreplaceelem.3 \ No newline at end of file
diff --git a/man3/memscan_inv.3libsimple b/man3/memscan_inv.3libsimple
new file mode 120000
index 0000000..5731155
--- /dev/null
+++ b/man3/memscan_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_memscan_inv.3 \ No newline at end of file
diff --git a/man3/memtolower.3libsimple b/man3/memtolower.3libsimple
new file mode 120000
index 0000000..15069ef
--- /dev/null
+++ b/man3/memtolower.3libsimple
@@ -0,0 +1 @@
+libsimple_memtolower.3 \ No newline at end of file
diff --git a/man3/memtoupper.3libsimple b/man3/memtoupper.3libsimple
new file mode 120000
index 0000000..61fe5ba
--- /dev/null
+++ b/man3/memtoupper.3libsimple
@@ -0,0 +1 @@
+libsimple_memtoupper.3 \ No newline at end of file
diff --git a/man3/rawmemcasechr_inv.3libsimple b/man3/rawmemcasechr_inv.3libsimple
new file mode 120000
index 0000000..41f170d
--- /dev/null
+++ b/man3/rawmemcasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemcasechr_inv.3 \ No newline at end of file
diff --git a/man3/rawmemccpy.3libsimple b/man3/rawmemccpy.3libsimple
new file mode 120000
index 0000000..32229d3
--- /dev/null
+++ b/man3/rawmemccpy.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemccpy.3 \ No newline at end of file
diff --git a/man3/rawmemchr_inv.3libsimple b/man3/rawmemchr_inv.3libsimple
new file mode 120000
index 0000000..2122527
--- /dev/null
+++ b/man3/rawmemchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemchr_inv.3 \ No newline at end of file
diff --git a/man3/rawmemcmove.3libsimple b/man3/rawmemcmove.3libsimple
new file mode 120000
index 0000000..e54ed0b
--- /dev/null
+++ b/man3/rawmemcmove.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemcmove.3 \ No newline at end of file
diff --git a/man3/rawmemelem.3libsimple b/man3/rawmemelem.3libsimple
new file mode 120000
index 0000000..18370bd
--- /dev/null
+++ b/man3/rawmemelem.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemelem.3 \ No newline at end of file
diff --git a/man3/rawmemelem_inv.3libsimple b/man3/rawmemelem_inv.3libsimple
new file mode 120000
index 0000000..625fff9
--- /dev/null
+++ b/man3/rawmemelem_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemelem_inv.3 \ No newline at end of file
diff --git a/man3/rawmemelemcpy.3libsimple b/man3/rawmemelemcpy.3libsimple
new file mode 120000
index 0000000..f9bf687
--- /dev/null
+++ b/man3/rawmemelemcpy.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemelemcpy.3 \ No newline at end of file
diff --git a/man3/rawmemelemmove.3libsimple b/man3/rawmemelemmove.3libsimple
new file mode 120000
index 0000000..d197b7e
--- /dev/null
+++ b/man3/rawmemelemmove.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemelemmove.3 \ No newline at end of file
diff --git a/man3/rawmemrcasechr_inv.3libsimple b/man3/rawmemrcasechr_inv.3libsimple
new file mode 120000
index 0000000..432415b
--- /dev/null
+++ b/man3/rawmemrcasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemrcasechr_inv.3 \ No newline at end of file
diff --git a/man3/rawmemrchr_inv.3libsimple b/man3/rawmemrchr_inv.3libsimple
new file mode 120000
index 0000000..593414d
--- /dev/null
+++ b/man3/rawmemrchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemrchr_inv.3 \ No newline at end of file
diff --git a/man3/rawmemrelem.3libsimple b/man3/rawmemrelem.3libsimple
new file mode 120000
index 0000000..0347b51
--- /dev/null
+++ b/man3/rawmemrelem.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemrelem.3 \ No newline at end of file
diff --git a/man3/rawmemrelem_inv.3libsimple b/man3/rawmemrelem_inv.3libsimple
new file mode 120000
index 0000000..2978493
--- /dev/null
+++ b/man3/rawmemrelem_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_rawmemrelem_inv.3 \ No newline at end of file
diff --git a/man3/stpnset.3libsimple b/man3/stpnset.3libsimple
new file mode 120000
index 0000000..7b4b4a9
--- /dev/null
+++ b/man3/stpnset.3libsimple
@@ -0,0 +1 @@
+libsimple_stpnset.3 \ No newline at end of file
diff --git a/man3/stpntolower.3libsimple b/man3/stpntolower.3libsimple
new file mode 120000
index 0000000..d984b63
--- /dev/null
+++ b/man3/stpntolower.3libsimple
@@ -0,0 +1 @@
+libsimple_stpntolower.3 \ No newline at end of file
diff --git a/man3/stpntoupper.3libsimple b/man3/stpntoupper.3libsimple
new file mode 120000
index 0000000..90e3de8
--- /dev/null
+++ b/man3/stpntoupper.3libsimple
@@ -0,0 +1 @@
+libsimple_stpntoupper.3 \ No newline at end of file
diff --git a/man3/stpset.3libsimple b/man3/stpset.3libsimple
new file mode 120000
index 0000000..d3fc99c
--- /dev/null
+++ b/man3/stpset.3libsimple
@@ -0,0 +1 @@
+libsimple_stpset.3 \ No newline at end of file
diff --git a/man3/stptolower.3libsimple b/man3/stptolower.3libsimple
new file mode 120000
index 0000000..ec73399
--- /dev/null
+++ b/man3/stptolower.3libsimple
@@ -0,0 +1 @@
+libsimple_stptolower.3 \ No newline at end of file
diff --git a/man3/stptoupper.3libsimple b/man3/stptoupper.3libsimple
new file mode 120000
index 0000000..a07091b
--- /dev/null
+++ b/man3/stptoupper.3libsimple
@@ -0,0 +1 @@
+libsimple_stptoupper.3 \ No newline at end of file
diff --git a/man3/strcasechr_inv.3libsimple b/man3/strcasechr_inv.3libsimple
new file mode 120000
index 0000000..1f39a11
--- /dev/null
+++ b/man3/strcasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasechr_inv.3 \ No newline at end of file
diff --git a/man3/strcasechrnul_inv.3libsimple b/man3/strcasechrnul_inv.3libsimple
new file mode 120000
index 0000000..c22e4f4
--- /dev/null
+++ b/man3/strcasechrnul_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strcasechrnul_inv.3 \ No newline at end of file
diff --git a/man3/strccpy.3libsimple b/man3/strccpy.3libsimple
new file mode 120000
index 0000000..5cd20b7
--- /dev/null
+++ b/man3/strccpy.3libsimple
@@ -0,0 +1 @@
+libsimple_strccpy.3 \ No newline at end of file
diff --git a/man3/strchr_inv.3libsimple b/man3/strchr_inv.3libsimple
new file mode 120000
index 0000000..cf32462
--- /dev/null
+++ b/man3/strchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strchr_inv.3 \ No newline at end of file
diff --git a/man3/strchrnul_inv.3libsimple b/man3/strchrnul_inv.3libsimple
new file mode 120000
index 0000000..4715f5b
--- /dev/null
+++ b/man3/strchrnul_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strchrnul_inv.3 \ No newline at end of file
diff --git a/man3/strcmove.3libsimple b/man3/strcmove.3libsimple
new file mode 120000
index 0000000..8c09bec
--- /dev/null
+++ b/man3/strcmove.3libsimple
@@ -0,0 +1 @@
+libsimple_strcmove.3 \ No newline at end of file
diff --git a/man3/strncasechr_inv.3libsimple b/man3/strncasechr_inv.3libsimple
new file mode 120000
index 0000000..7b3e990
--- /dev/null
+++ b/man3/strncasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasechr_inv.3 \ No newline at end of file
diff --git a/man3/strncasechrnul_inv.3libsimple b/man3/strncasechrnul_inv.3libsimple
new file mode 120000
index 0000000..9bdbd9d
--- /dev/null
+++ b/man3/strncasechrnul_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strncasechrnul_inv.3 \ No newline at end of file
diff --git a/man3/strnccpy.3libsimple b/man3/strnccpy.3libsimple
new file mode 120000
index 0000000..0c1a68c
--- /dev/null
+++ b/man3/strnccpy.3libsimple
@@ -0,0 +1 @@
+libsimple_strnccpy.3 \ No newline at end of file
diff --git a/man3/strnchr_inv.3libsimple b/man3/strnchr_inv.3libsimple
new file mode 120000
index 0000000..3acb8b4
--- /dev/null
+++ b/man3/strnchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strnchr_inv.3 \ No newline at end of file
diff --git a/man3/strnchrnul_inv.3libsimple b/man3/strnchrnul_inv.3libsimple
new file mode 120000
index 0000000..d815acd
--- /dev/null
+++ b/man3/strnchrnul_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strnchrnul_inv.3 \ No newline at end of file
diff --git a/man3/strncmove.3libsimple b/man3/strncmove.3libsimple
new file mode 120000
index 0000000..e229a29
--- /dev/null
+++ b/man3/strncmove.3libsimple
@@ -0,0 +1 @@
+libsimple_strncmove.3 \ No newline at end of file
diff --git a/man3/strnreplace.3libsimple b/man3/strnreplace.3libsimple
new file mode 120000
index 0000000..1b2659a
--- /dev/null
+++ b/man3/strnreplace.3libsimple
@@ -0,0 +1 @@
+libsimple_strnreplace.3 \ No newline at end of file
diff --git a/man3/strnset.3libsimple b/man3/strnset.3libsimple
new file mode 120000
index 0000000..0e4427d
--- /dev/null
+++ b/man3/strnset.3libsimple
@@ -0,0 +1 @@
+libsimple_strnset.3 \ No newline at end of file
diff --git a/man3/strntolower.3libsimple b/man3/strntolower.3libsimple
new file mode 120000
index 0000000..8ed56d9
--- /dev/null
+++ b/man3/strntolower.3libsimple
@@ -0,0 +1 @@
+libsimple_strntolower.3 \ No newline at end of file
diff --git a/man3/strntoupper.3libsimple b/man3/strntoupper.3libsimple
new file mode 120000
index 0000000..72dc5e6
--- /dev/null
+++ b/man3/strntoupper.3libsimple
@@ -0,0 +1 @@
+libsimple_strntoupper.3 \ No newline at end of file
diff --git a/man3/strrcasechr_inv.3libsimple b/man3/strrcasechr_inv.3libsimple
new file mode 120000
index 0000000..d834dd8
--- /dev/null
+++ b/man3/strrcasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strrcasechr_inv.3 \ No newline at end of file
diff --git a/man3/strrchr_inv.3libsimple b/man3/strrchr_inv.3libsimple
new file mode 120000
index 0000000..a524153
--- /dev/null
+++ b/man3/strrchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strrchr_inv.3 \ No newline at end of file
diff --git a/man3/strreplace.3libsimple b/man3/strreplace.3libsimple
new file mode 120000
index 0000000..549e5df
--- /dev/null
+++ b/man3/strreplace.3libsimple
@@ -0,0 +1 @@
+libsimple_strreplace.3 \ No newline at end of file
diff --git a/man3/strrncasechr_inv.3libsimple b/man3/strrncasechr_inv.3libsimple
new file mode 120000
index 0000000..2159d8f
--- /dev/null
+++ b/man3/strrncasechr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strrncasechr_inv.3 \ No newline at end of file
diff --git a/man3/strrnchr_inv.3libsimple b/man3/strrnchr_inv.3libsimple
new file mode 120000
index 0000000..481ac14
--- /dev/null
+++ b/man3/strrnchr_inv.3libsimple
@@ -0,0 +1 @@
+libsimple_strrnchr_inv.3 \ No newline at end of file
diff --git a/man3/strset.3libsimple b/man3/strset.3libsimple
new file mode 120000
index 0000000..dc775b8
--- /dev/null
+++ b/man3/strset.3libsimple
@@ -0,0 +1 @@
+libsimple_strset.3 \ No newline at end of file
diff --git a/man3/strtolower.3libsimple b/man3/strtolower.3libsimple
new file mode 120000
index 0000000..cc6ac1f
--- /dev/null
+++ b/man3/strtolower.3libsimple
@@ -0,0 +1 @@
+libsimple_strtolower.3 \ No newline at end of file
diff --git a/man3/strtoupper.3libsimple b/man3/strtoupper.3libsimple
new file mode 120000
index 0000000..ec7e542
--- /dev/null
+++ b/man3/strtoupper.3libsimple
@@ -0,0 +1 @@
+libsimple_strtoupper.3 \ No newline at end of file
diff --git a/memcasechr_inv.c b/memcasechr_inv.c
index 82268d8..6b89e66 100644
--- a/memcasechr_inv.c
+++ b/memcasechr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memcasechr_inv(const void *s_, int c, size_t n) /* TODO man */
+libsimple_memcasechr_inv(const void *s_, int c, size_t n)
{
char *s = *(char **)(void *)&s_;
size_t i = 0;
diff --git a/memcasescan_inv.c b/memcasescan_inv.c
index 207c62d..28d7848 100644
--- a/memcasescan_inv.c
+++ b/memcasescan_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memcasescan_inv(const void *s_, int c, size_t n) /* TODO man */
+libsimple_memcasescan_inv(const void *s_, int c, size_t n)
{
char *s = *(char **)(void *)&s_;
size_t i = 0;
diff --git a/memelem_inv.c b/memelem_inv.c
index e393c4e..5c3153d 100644
--- a/memelem_inv.c
+++ b/memelem_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memelem_inv(const void *hay_, size_t hayn, const void *sub_, size_t subn) /* TODO man */
+libsimple_memelem_inv(const void *hay_, size_t hayn, const void *sub_, size_t subn)
{
switch (subn) {
case 0:
diff --git a/memelemscan_inv.c b/memelemscan_inv.c
index 6311229..7e7a0a4 100644
--- a/memelemscan_inv.c
+++ b/memelemscan_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memelemscan_inv(const void *hay_, size_t hayn, const void *sub_, size_t subn) /* TODO man */
+libsimple_memelemscan_inv(const void *hay_, size_t hayn, const void *sub_, size_t subn)
{
switch (subn) {
case 0:
diff --git a/memrcasechr_inv.c b/memrcasechr_inv.c
index 629bcc2..85f1f58 100644
--- a/memrcasechr_inv.c
+++ b/memrcasechr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memrcasechr_inv(const void *s_, int c, size_t n_) /* TODO man */
+libsimple_memrcasechr_inv(const void *s_, int c, size_t n_)
{
char *s = *(char **)(void *)&s_;
ssize_t n = n_;
diff --git a/memrchr_inv.c b/memrchr_inv.c
index d49d878..03613e3 100644
--- a/memrchr_inv.c
+++ b/memrchr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memrchr_inv(const void *s_, int c_, size_t n_) /* TODO man */
+libsimple_memrchr_inv(const void *s_, int c_, size_t n_)
{
char *s = *(char **)(void *)&s_, c = (char)c_;
ssize_t n = n_;
diff --git a/memrelem_inv.c b/memrelem_inv.c
index 10ba8b8..6d98a55 100644
--- a/memrelem_inv.c
+++ b/memrelem_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memrelem_inv(const void *hay_, size_t hayn, const void *sub_, size_t subn) /* TODO man */
+libsimple_memrelem_inv(const void *hay_, size_t hayn, const void *sub_, size_t subn)
{
switch (subn) {
case 0:
diff --git a/memscan_inv.c b/memscan_inv.c
index 7c3c935..29bdfce 100644
--- a/memscan_inv.c
+++ b/memscan_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_memscan_inv(const void *s_, int c_, size_t n) /* TODO man */
+libsimple_memscan_inv(const void *s_, int c_, size_t n)
{
char *s = *(char **)(void *)&s_, c = (char)c_;
size_t i = 0;
diff --git a/rawmemcasechr_inv.c b/rawmemcasechr_inv.c
index 9f53fda..13101cf 100644
--- a/rawmemcasechr_inv.c
+++ b/rawmemcasechr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_rawmemcasechr_inv(const void *s_, int c) /* TODO man */
+libsimple_rawmemcasechr_inv(const void *s_, int c)
{
char *s = *(char **)(void *)&s_;
c = tolower(c);
diff --git a/rawmemchr_inv.c b/rawmemchr_inv.c
index 1df5817..d566aba 100644
--- a/rawmemchr_inv.c
+++ b/rawmemchr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_rawmemchr_inv(const void *s_, int c_) /* TODO man */
+libsimple_rawmemchr_inv(const void *s_, int c_)
{
char *s = *(char **)(void *)&s_, c = (char)c_;
while (*s++ == c);
diff --git a/rawmemrcasechr_inv.c b/rawmemrcasechr_inv.c
index 2193181..483de3e 100644
--- a/rawmemrcasechr_inv.c
+++ b/rawmemrcasechr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_rawmemrcasechr_inv(const void *s_, int c, size_t n) /* TODO man */
+libsimple_rawmemrcasechr_inv(const void *s_, int c, size_t n)
{
char *s = *(char **)(void *)&s_;
c = tolower(c);
diff --git a/rawmemrchr_inv.c b/rawmemrchr_inv.c
index 6c6b9db..c6a9b22 100644
--- a/rawmemrchr_inv.c
+++ b/rawmemrchr_inv.c
@@ -4,7 +4,7 @@
void *
-libsimple_rawmemrchr_inv(const void *s_, int c_, size_t n) /* TODO man */
+libsimple_rawmemrchr_inv(const void *s_, int c_, size_t n)
{
char *s = *(char **)(void *)&s_, c = (char)c_;
while (s[--n] == c);
diff --git a/strcasechrnul_inv.c b/strcasechrnul_inv.c
index b2cbf56..9c59d71 100644
--- a/strcasechrnul_inv.c
+++ b/strcasechrnul_inv.c
@@ -4,7 +4,7 @@
char *
-libsimple_strcasechrnul_inv(const char *s_, int c) /* TODO man */
+libsimple_strcasechrnul_inv(const char *s_, int c)
{
char *s = *(char **)(void *)&s_, lc = (char)tolower(c), uc = (char)toupper(c);
if (lc != uc)
diff --git a/strchrnul_inv.c b/strchrnul_inv.c
index c045623..1f79eb3 100644
--- a/strchrnul_inv.c
+++ b/strchrnul_inv.c
@@ -4,7 +4,7 @@
char *
-libsimple_strchrnul_inv(const char *s_, int c_) /* TODO man */
+libsimple_strchrnul_inv(const char *s_, int c_)
{
char *s = *(char **)(void *)&s_, c = (char)c_;
for (; *s && *s == c; s++);
diff --git a/strncasechrnul_inv.c b/strncasechrnul_inv.c
index bcf8eaa..6d6af35 100644
--- a/strncasechrnul_inv.c
+++ b/strncasechrnul_inv.c
@@ -4,7 +4,7 @@
char *
-libsimple_strncasechrnul_inv(const char *s_, int c, size_t n) /* TODO man */
+libsimple_strncasechrnul_inv(const char *s_, int c, size_t n)
{
char *s = *(char **)(void *)&s_;
char *end = &s[n];
diff --git a/strnchrnul_inv.c b/strnchrnul_inv.c
index 142b9c7..a887221 100644
--- a/strnchrnul_inv.c
+++ b/strnchrnul_inv.c
@@ -4,7 +4,7 @@
char *
-libsimple_strnchrnul_inv(const char *s_, int c_, size_t n) /* TODO man */
+libsimple_strnchrnul_inv(const char *s_, int c_, size_t n)
{
char *s = *(char **)(void *)&s_, c = (char)c_;
char *end = &s[n];