Update Changes.
[p5sagit/p5-mst-13.2.git] / handy.h
diff --git a/handy.h b/handy.h
index ce2631f..d82b1c6 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -48,18 +48,18 @@ Null SV pointer.
    just figure out all the headers such a test needs.
    Andy Dougherty      August 1996
 */
-/* bool is built-in for g++-2.6.3, which might be used for an extension.
-   If the extension includes <_G_config.h> before this file then
-   _G_HAVE_BOOL will be properly set.  If, however, the extension includes
-   this file first, then you will have to manually set -DHAS_BOOL in 
-   your command line to avoid a conflict.
+/* bool is built-in for g++-2.6.3 and later, which might be used 
+   for extensions.  <_G_config.h> defines _G_HAVE_BOOL, but we can't
+   be sure _G_config.h will be included before this file.  _G_config.h
+   also defines _G_HAVE_BOOL for both gcc and g++, but only g++ 
+   actually has bool.  Hence, _G_HAVE_BOOL is pretty useless for us.
+   g++ can be identified by __GNUG__.
+   Andy Dougherty      February 2000
 */
-#ifdef _G_HAVE_BOOL
-# if _G_HAVE_BOOL
+#ifdef __GNUG__        /* GNU g++ has bool built-in */
 #  ifndef HAS_BOOL
-#   define HAS_BOOL 1
+#    define HAS_BOOL 1
 #  endif
-# endif
 #endif
 
 /* The NeXT dynamic loader headers will not build with the bool macro
@@ -81,6 +81,7 @@ Null SV pointer.
 # else
 #  define bool char
 # endif
+# define HAS_BOOL 1
 #endif
 
 /* XXX A note on the perl source internal type system.  The
@@ -259,18 +260,18 @@ C<strncmp>).
 
 /*
 =for apidoc Am|bool|isALNUM|char ch
-Returns a boolean indicating whether the C C<char> is an ascii alphanumeric
-character or digit.
+Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
+character (including underscore) or digit.
 
 =for apidoc Am|bool|isALPHA|char ch
-Returns a boolean indicating whether the C C<char> is an ascii alphabetic
+Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
 character.
 
 =for apidoc Am|bool|isSPACE|char ch
 Returns a boolean indicating whether the C C<char> is whitespace.
 
 =for apidoc Am|bool|isDIGIT|char ch
-Returns a boolean indicating whether the C C<char> is an ascii
+Returns a boolean indicating whether the C C<char> is an ASCII
 digit.
 
 =for apidoc Am|bool|isUPPER|char ch
@@ -295,6 +296,8 @@ Converts the specified character to lowercase.
 #define isALPHA(c)     (isUPPER(c) || isLOWER(c))
 #define isSPACE(c) \
        ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) =='\r' || (c) == '\f')
+#define isPSXSPC(c)    (isSPACE(c) || (c) == '\v')
+#define isBLANK(c)     ((c) == ' ' || (c) == '\t')
 #define isDIGIT(c)     ((c) >= '0' && (c) <= '9')
 #ifdef EBCDIC
     /* In EBCDIC we do not do locales: therefore() isupper() is fine. */
@@ -381,6 +384,9 @@ Converts the specified character to lowercase.
 #  endif
 #endif /* USE_NEXT_CTYPE */
 
+#define isPSXSPC_LC(c)         (isSPACE_LC(c) || (c) == '\v')
+#define isBLANK_LC(c)          isBLANK(c) /* could be wrong */
+
 #define isALNUM_uni(c)         is_uni_alnum(c)
 #define isIDFIRST_uni(c)       is_uni_idfirst(c)
 #define isALPHA_uni(c)         is_uni_alpha(c)
@@ -399,6 +405,9 @@ Converts the specified character to lowercase.
 #define toTITLE_uni(c)         to_uni_title(c)
 #define toLOWER_uni(c)         to_uni_lower(c)
 
+#define isPSXSPC_uni(c)                (isSPACE_uni(c) ||(c) == '\f')
+#define isBLANK_uni(c)         isBLANK(c) /* could be wrong */
+
 #define isALNUM_LC_uni(c)      (c < 256 ? isALNUM_LC(c) : is_uni_alnum_lc(c))
 #define isIDFIRST_LC_uni(c)    (c < 256 ? isIDFIRST_LC(c) : is_uni_idfirst_lc(c))
 #define isALPHA_LC_uni(c)      (c < 256 ? isALPHA_LC(c) : is_uni_alpha_lc(c))
@@ -415,6 +424,9 @@ Converts the specified character to lowercase.
 #define toTITLE_LC_uni(c)      (c < 256 ? toUPPER_LC(c) : to_uni_title_lc(c))
 #define toLOWER_LC_uni(c)      (c < 256 ? toLOWER_LC(c) : to_uni_lower_lc(c))
 
+#define isPSXSPC_LC_uni(c)     (isSPACE_LC_uni(c) ||(c) == '\f')
+#define isBLANK_LC_uni(c)      isBLANK(c) /* could be wrong */
+
 #define isALNUM_utf8(p)                is_utf8_alnum(p)
 #define isIDFIRST_utf8(p)      is_utf8_idfirst(p)
 #define isALPHA_utf8(p)                is_utf8_alpha(p)
@@ -433,6 +445,9 @@ Converts the specified character to lowercase.
 #define toTITLE_utf8(p)                to_utf8_title(p)
 #define toLOWER_utf8(p)                to_utf8_lower(p)
 
+#define isPSXSPC_utf8(c)       (isSPACE_utf8(c) ||(c) == '\f')
+#define isBLANK_utf8(c)                isBLANK(c) /* could be wrong */
+
 #define isALNUM_LC_utf8(p)     isALNUM_LC_uni(utf8_to_uv(p, 0))
 #define isIDFIRST_LC_utf8(p)   isIDFIRST_LC_uni(utf8_to_uv(p, 0))
 #define isALPHA_LC_utf8(p)     isALPHA_LC_uni(utf8_to_uv(p, 0))
@@ -449,6 +464,9 @@ Converts the specified character to lowercase.
 #define toTITLE_LC_utf8(p)     toTITLE_LC_uni(utf8_to_uv(p, 0))
 #define toLOWER_LC_utf8(p)     toLOWER_LC_uni(utf8_to_uv(p, 0))
 
+#define isPSXSPC_LC_utf8(c)    (isSPACE_LC_utf8(c) ||(c) == '\f')
+#define isBLANK_LC_utf8(c)     isBLANK(c) /* could be wrong */
+
 #ifdef EBCDIC
 EXT int ebcdic_control (int);
 #  define toCTRL(c)    ebcdic_control(c)
@@ -466,10 +484,10 @@ typedef U16 line_t;
 #endif
 
 
-/* This looks obsolete (IZ):
-
+/* 
    XXX LEAKTEST doesn't really work in perl5.  There are direct calls to
    safemalloc() in the source, so LEAKTEST won't pick them up.
+   (The main "offenders" are extensions.)
    Further, if you try LEAKTEST, you'll also end up calling
    Safefree, which might call safexfree() on some things that weren't
    malloced with safexmalloc.  The correct "fix" to this, if anyone
@@ -504,7 +522,7 @@ The XSUB-writer's interface to the C C<realloc> function.
 The XSUB-writer's interface to the C C<realloc> function, with
 cast.
 
-=for apidoc Am|void|Safefree|void* src|void* dest|int nitems|type
+=for apidoc Am|void|Safefree|void* ptr
 The XSUB-writer's interface to the C C<free> function.
 
 =for apidoc Am|void|Move|void* src|void* dest|int nitems|type
@@ -523,7 +541,7 @@ The XSUB-writer's interface to the C C<memzero> function.  The C<dest> is the
 destination, C<nitems> is the number of items, and C<type> is the type.
 
 =for apidoc Am|void|StructCopy|type src|type dest|type
-This is an architecture-independant macro to copy one structure to another.
+This is an architecture-independent macro to copy one structure to another.
 
 =cut
 */