X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=handy.h;h=90791f980ed217333621d65a408dbcdf8594fa7a;hb=3937c24e3f4ed26beafd7a2fbe3a20466bfc2b2d;hp=233304b1f2b7b2412761d8db53af244afe08a235;hpb=dc45a647708b6c5442e1362e6b6e7a2583c30346;p=p5sagit%2Fp5-mst-13.2.git diff --git a/handy.h b/handy.h index 233304b..90791f9 100644 --- a/handy.h +++ b/handy.h @@ -105,6 +105,31 @@ Andy Dougherty April 1998 */ +#if defined(UINT8_MAX) && defined(INT16_MAX) && defined(INT32_MAX) + +typedef int8_t I8; +typedef uint8_t U8; +/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type. + Please search CHAR_MAX in perl.h for further details. */ +#define U8_MAX UINT8_MAX +#define U8_MIN UINT8_MIN + +typedef int16_t I16; +typedef uint16_t U16; +#define I16_MAX INT16_MAX +#define I16_MIN INT16_MIN +#define U16_MAX UINT16_MAX +#define U16_MIN UINT16_MIN + +typedef int32_t I32; +typedef uint32_t U32; +#define I32_MAX INT32_MAX +#define I32_MIN INT32_MIN +#define U32_MAX UINT32_MAX +#define U32_MIN UINT32_MIN + +#else + typedef char I8; typedef unsigned char U8; /* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type. @@ -112,6 +137,7 @@ typedef unsigned char U8; #define U8_MAX PERL_UCHAR_MAX #define U8_MIN PERL_UCHAR_MIN +/* Beware. SHORTSIZE > 2 in Cray C90ties. */ typedef short I16; typedef unsigned short U16; #define I16_MAX PERL_SHORT_MAX @@ -119,7 +145,7 @@ typedef unsigned short U16; #define U16_MAX PERL_USHORT_MAX #define U16_MIN PERL_USHORT_MIN -#if BYTEORDER > 0x4321 +#if LONGSIZE > 4 typedef int I32; typedef unsigned int U32; # define I32_MAX PERL_INT_MAX @@ -135,6 +161,8 @@ typedef unsigned short U16; # define U32_MIN PERL_ULONG_MIN #endif +#endif + #define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */ #define TYPE_DIGITS(T) BIT_DIGITS(sizeof(T) * 8) #define TYPE_CHARS(T) (TYPE_DIGITS(T) + 2) /* sign, NUL */ @@ -183,11 +211,20 @@ typedef unsigned short U16; #define isSPACE(c) \ ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) =='\r' || (c) == '\f') #define isDIGIT(c) ((c) >= '0' && (c) <= '9') -#define isUPPER(c) ((c) >= 'A' && (c) <= 'Z') -#define isLOWER(c) ((c) >= 'a' && (c) <= 'z') -#define isPRINT(c) (((c) > 32 && (c) < 127) || isSPACE(c)) -#define toUPPER(c) (isLOWER(c) ? (c) - ('a' - 'A') : (c)) -#define toLOWER(c) (isUPPER(c) ? (c) + ('a' - 'A') : (c)) +#ifdef EBCDIC + /* In EBCDIC we do not do locales: therefore() isupper() is fine. */ +# define isUPPER(c) isupper(c) +# define isLOWER(c) islower(c) +# define isPRINT(c) isprint(c) +# define toUPPER(c) toupper(c) +# define toLOWER(c) tolower(c) +#else +# define isUPPER(c) ((c) >= 'A' && (c) <= 'Z') +# define isLOWER(c) ((c) >= 'a' && (c) <= 'z') +# define isPRINT(c) (((c) > 32 && (c) < 127) || isSPACE(c)) +# define toUPPER(c) (isLOWER(c) ? (c) - ('a' - 'A') : (c)) +# define toLOWER(c) (isUPPER(c) ? (c) + ('a' - 'A') : (c)) +#endif #ifdef USE_NEXT_CTYPE @@ -238,8 +275,61 @@ typedef unsigned short U16; # endif #endif /* USE_NEXT_CTYPE */ -/* This conversion works both ways, strangely enough. */ -#define toCTRL(c) (toUPPER(c) ^ 64) +#define isALNUM_uni(c) is_uni_alnum(c) +#define isIDFIRST_uni(c) is_uni_idfirst(c) +#define isALPHA_uni(c) is_uni_alpha(c) +#define isSPACE_uni(c) is_uni_space(c) +#define isDIGIT_uni(c) is_uni_digit(c) +#define isUPPER_uni(c) is_uni_upper(c) +#define isLOWER_uni(c) is_uni_lower(c) +#define isPRINT_uni(c) is_uni_print(c) +#define toUPPER_uni(c) to_uni_upper(c) +#define toTITLE_uni(c) to_uni_title(c) +#define toLOWER_uni(c) to_uni_lower(c) + +#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)) +#define isSPACE_LC_uni(c) (c < 256 ? isSPACE_LC(c) : is_uni_space_lc(c)) +#define isDIGIT_LC_uni(c) (c < 256 ? isDIGIT_LC(c) : is_uni_digit_lc(c)) +#define isUPPER_LC_uni(c) (c < 256 ? isUPPER_LC(c) : is_uni_upper_lc(c)) +#define isLOWER_LC_uni(c) (c < 256 ? isLOWER_LC(c) : is_uni_lower_lc(c)) +#define isPRINT_LC_uni(c) (c < 256 ? isPRINT_LC(c) : is_uni_print_lc(c)) +#define toUPPER_LC_uni(c) (c < 256 ? toUPPER_LC(c) : to_uni_upper_lc(c)) +#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 isALNUM_utf8(p) is_utf8_alnum(p) +#define isIDFIRST_utf8(p) is_utf8_idfirst(p) +#define isALPHA_utf8(p) is_utf8_alpha(p) +#define isSPACE_utf8(p) is_utf8_space(p) +#define isDIGIT_utf8(p) is_utf8_digit(p) +#define isUPPER_utf8(p) is_utf8_upper(p) +#define isLOWER_utf8(p) is_utf8_lower(p) +#define isPRINT_utf8(p) is_utf8_print(p) +#define toUPPER_utf8(p) to_utf8_upper(p) +#define toTITLE_utf8(p) to_utf8_title(p) +#define toLOWER_utf8(p) to_utf8_lower(p) + +#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)) +#define isSPACE_LC_utf8(p) isSPACE_LC_uni(utf8_to_uv(p, 0)) +#define isDIGIT_LC_utf8(p) isDIGIT_LC_uni(utf8_to_uv(p, 0)) +#define isUPPER_LC_utf8(p) isUPPER_LC_uni(utf8_to_uv(p, 0)) +#define isLOWER_LC_utf8(p) isLOWER_LC_uni(utf8_to_uv(p, 0)) +#define isPRINT_LC_utf8(p) isPRINT_LC_uni(utf8_to_uv(p, 0)) +#define toUPPER_LC_utf8(p) toUPPER_LC_uni(utf8_to_uv(p, 0)) +#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)) + +#ifdef EBCDIC +EXT int ebcdic_control _((int)); +# define toCTRL(c) ebcdic_control(c) +#else + /* This conversion works both ways, strangely enough. */ +# define toCTRL(c) (toUPPER(c) ^ 64) +#endif /* Line numbers are unsigned, 16 bits. */ typedef U16 line_t; @@ -263,6 +353,9 @@ typedef U16 line_t; */ #ifndef lint + +#define NEWSV(x,len) newSV(len) + #ifndef LEAKTEST #define New(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))) @@ -274,7 +367,6 @@ typedef U16 line_t; #define Renewc(v,n,t,c) \ (v = (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))) #define Safefree(d) safefree((Malloc_t)(d)) -#define NEWSV(x,len) newSV(len) #else /* LEAKTEST */ @@ -287,7 +379,6 @@ typedef U16 line_t; #define Renewc(v,n,t,c) \ (v = (c*)safexrealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))) #define Safefree(d) safexfree((Malloc_t)(d)) -#define NEWSV(x,len) newSV(x,len) #define MAXXCOUNT 1400 #define MAXY_SIZE 80