Index: libcfa/src/stdlib.cfa
===================================================================
--- libcfa/src/stdlib.cfa	(revision 54af365fe21768cc290024aaeb88d8cbf7f0563f)
+++ libcfa/src/stdlib.cfa	(revision 057608ac6cb8128dfade87d081f239b0aec340c9)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 15 18:47:28 2024
-// Update Count     : 685
+// Last Modified On : Sun Mar 17 08:25:32 2024
+// Update Count     : 699
 //
 
@@ -21,8 +21,7 @@
 
 #include <string.h>										// memcpy, memset
-//#include <math.h>										// fabsf, fabs, fabsl
 #include <complex.h>									// _Complex_I
 #include <assert.h>
-#include <ctype.h>
+#include <ctype.h>										// isblank
 
 #pragma GCC visibility push(default)
@@ -66,101 +65,21 @@
 //---------------------------------------
 
-// Cannot overload with singular (isspace) counterparts because they are macros.
-
-bool isalnums( const char s[] ) {
+// Check if all string characters are a specific kind, e.g., checkif( s, isblank )
+
+bool checkif( const char s[], int (* kind)( int ) ) {
 	for () {
 		if ( *s == '\0' ) return true;
-		if ( ! isalnum( *s ) ) return false;
+		if ( ! kind( *s ) ) return false;
 		s += 1;
 	} // for
-} // isalnums
-
-bool isalphas( const char s[] ) {
+} // checkif
+
+bool checkif( const char s[], int (* kind)( int, locale_t ), locale_t locale ) {
 	for () {
 		if ( *s == '\0' ) return true;
-		if ( ! isalpha( *s ) ) return false;
+		if ( ! kind( *s, locale ) ) return false;
 		s += 1;
 	} // for
-} // isblanks
-
-bool iscntrls( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! iscntrl( *s ) ) return false;
-		s += 1;
-	} // for
-} // iscntrls
-
-bool isdigits( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isdigit( *s ) ) return false;
-		s += 1;
-	} // for
-} // isdigits
-
-bool isgraphs( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isgraph( *s ) ) return false;
-		s += 1;
-	} // for
-} // isgraphs
-
-bool islowers( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! islower( *s ) ) return false;
-		s += 1;
-	} // for
-} // islowers
-
-bool isprints( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isprint( *s ) ) return false;
-		s += 1;
-	} // for
-} // isprints
-
-bool ispuncts( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! ispunct( *s ) ) return false;
-		s += 1;
-	} // for
-} // ispuncts
-
-bool isspaces( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isspace( *s ) ) return false;
-		s += 1;
-	} // for
-} // isspaces
-
-bool isblanks( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isblank( *s ) ) return false;
-		s += 1;
-	} // for
-} // isblanks
-
-bool isuppers( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isupper( *s ) ) return false;
-		s += 1;
-	} // for
-} // isuppers
-
-bool isxdigits( const char s[] ) {
-	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! isxdigit( *s ) ) return false;
-		s += 1;
-	} // for
-} // isxdigits
+} // checkif
 
 //---------------------------------------
@@ -225,5 +144,5 @@
 	if ( errno == ERANGE ) throw ExceptionInst( out_of_range );
 	if ( eptr == sptr ||								// conversion failed, no characters generated
-		 eptr[0] != '\0' && ! isspaces( eptr ) ) throw ExceptionInst( invalid_argument ); // not at end of blank str ?
+		 eptr[0] != '\0' && ! checkif( eptr, isblank ) ) throw ExceptionInst( invalid_argument ); // not at end of blank str ?
 	return val;
 } // convert
@@ -236,5 +155,5 @@
 	if ( errno == ERANGE ) throw ExceptionInst( out_of_range );
 	if ( eptr == sptr ||								// conversion failed, no characters generated
-		 eptr[0] != '\0' && ! isspaces( eptr ) ) throw ExceptionInst( invalid_argument ); // not at end of blank str ?
+		 eptr[0] != '\0' && ! checkif( eptr, isblank ) ) throw ExceptionInst( invalid_argument ); // not at end of blank str ?
 	return val;
 } // convert
Index: libcfa/src/stdlib.hfa
===================================================================
--- libcfa/src/stdlib.hfa	(revision 54af365fe21768cc290024aaeb88d8cbf7f0563f)
+++ libcfa/src/stdlib.hfa	(revision 057608ac6cb8128dfade87d081f239b0aec340c9)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 15 18:47:26 2024
-// Update Count     : 792
+// Last Modified On : Sun Mar 17 08:25:31 2024
+// Update Count     : 796
 //
 
@@ -293,18 +293,7 @@
 //---------------------------------------
 
-// Cannot overload with singular (isspace) counterparts because they are macros.
-
-bool isalnums( const char s[] );
-bool isalphas( const char s[] );
-bool iscntrls( const char s[] );
-bool isdigits( const char s[] );
-bool isgraphs( const char s[] );
-bool islowers( const char s[] );
-bool isprints( const char s[] );
-bool ispuncts( const char s[] );
-bool isspaces( const char s[] );
-bool isblanks( const char s[] );
-bool isuppers( const char s[] );
-bool isxdigits( const char s[] );
+// Check if all string characters are a specific kind, e.g., checkif( s, isblank )
+bool checkif( const char s[], int (* kind)( int ) );
+bool checkif( const char s[], int (* kind)( int, locale_t ), locale_t locale );
 
 //---------------------------------------
