/* * * _LOCALE.H * * locale support definitions * * */ /* * C/C++ Run Time Library - Version 1.5 * * Copyright (c) 1992, 1994 by Borland International * All Rights Reserved. * */ #ifndef ___LOCALE_H #define ___LOCALE_H #if !defined(___DEFS_H) #include <_defs.h> #endif #if !defined(__STDDEF_H) #include #endif #if !defined(__LOCALE_H) #include #endif #if !defined(__DIR_H) #include #endif #pragma option -a- /* version info */ #define LCLIB_MAJOR_VERSION 1 #define LCLIB_MINOR_VERSION 0 #define LCLIB_REVISION 1 /* error codes */ #define LOCALE_NO_ERROR 0 #define LOCALE_ERROR -1 #define OSFILE_NO_ERROR 0 #define OSFILE_ERROR -1 #define MAX_COMPRESS_ELEMENT_SIZE 10 #define MAX_EXPANSION_ELEMENT_SIZE 10 #define MAX_STRING_ELEMENT_SIZE 10 #define MAX_SUBSTITUTION_ELEMENT_SIZE 10 #define MAX_LEVELS 8 #define MAX_LOCALE_NAME 25 #define MAX_DAYS 7 #define MAX_MONS 12 #define MAX_AMPM 2 #define MAX_ALT_DIGITS 100 #define MAX_ABDAY_LEN 10 #define MAX_ABMON_LEN 10 #define MAX_DAY_LEN 20 #define MAX_MON_LEN 20 #define MAX_AMPM_LEN 10 #define MAX_DTFMT_LEN 25 #define MAX_ALT_DIGIT_LEN 10 #define _AM 0 #define _PM 1 #define FORWARD_RULE 0x01 #define BACKWARD_RULE 0x02 #define SUBSTITUTE_RULE 0x04 #define NO_SUBSTITUTE_RULE 0x08 #define POSITION_RULE 0x10 #define NO_POSITION_RULE 0x20 #define MAX_LCNAME_LEN 32 #define MAX_CATNAME_LEN 32 #define MAX_CSNAME_LEN 16 #define MAX_EXPAND_CHARS 16 #define MAX_COMPRESS_CHARS 16 #define MAX_SUBSTITUTE_STRS 16 /* SBCS code set size */ #define SBCS_SIZE 256 #define _TOUPPER_ SBCS_SIZE #define _TOLOWER_ SBCS_SIZE #define _SBCS_ 0x0101 #define _MBCS_12_ 0x0102 #define _DBCS_ 0x0202 #define _MBCS_STATE_ 0x0000 /* type size: */ /* collation class */ #define SBCS_COLLATECLASS_TSIZE ( SBCS_SIZE + 1 ) /* collation level */ #define SBCS_COLLATELEVEL_TSIZE ( SBCS_SIZE + 1 ) /* byte size: */ /* collation class */ #define SBCS_COLLATECLASS_BSIZE ( SBCS_COLLATECLASS_TSIZE * sizeof( unsigned char ) ) /* collation level */ #define SBCS_COLLATELEVEL_BSIZE ( SBCS_COLLATELEVEL_TSIZE * sizeof( unsigned char ) ) /* type size: */ /* ctype */ #define SBCS_CTYPE_TSIZE ( SBCS_SIZE + 1 ) /* lower */ #define SBCS_LOWER_TSIZE ( SBCS_SIZE ) /* upper */ #define SBCS_UPPER_TSIZE ( SBCS_SIZE ) /* byte size: */ /* ctype */ #define SBCS_CTYPE_BSIZE ( SBCS_CTYPE_TSIZE * sizeof( unsigned char ) ) /* lower */ #define SBCS_LOWER_BSIZE ( SBCS_LOWER_TSIZE * sizeof( unsigned char ) ) /* upper */ #define SBCS_UPPER_BSIZE ( SBCS_UPPER_TSIZE * sizeof( unsigned char ) ) /* category size: */ /* LC_CTYPE */ #define SBCS_CTYPE_CATSIZE ( \ SBCS_CTYPE_BSIZE + \ SBCS_LOWER_BSIZE + \ SBCS_UPPER_BSIZE \ ) #define LC_RESERVED1 8 #define LC_RESERVED2 9 #define LC_RESERVED3 10 #define LC_RESERVED4 11 #define LC_RESERVED5 12 #define LC_RESERVED6 13 /* computed bit masks */ #define __LC_COLLATE 0x0001 #define __LC_CTYPE 0x0002 #define __LC_MONETARY 0x0004 #define __LC_NUMERIC 0x0008 #define __LC_TIME 0x0010 #define __LC_MESSAGES 0x0020 #define __LC_userdef 0x0040 #define __LC_RESERVED1 0x0080 #define __LC_RESERVED2 0x0100 #define __LC_RESERVED3 0x0200 #define __LC_RESERVED4 0x0400 #define __LC_RESERVED5 0x0800 #define __LC_RESERVED6 0x1000 #define _STATIC 0x0000 #define _DYNAMIC 0x0001 #define SEGLOC 0x02 #define LENGTH_DIFFERENCE 0x07f7f #define CODESET_SIZE SBCS_SIZE /* string status */ #define INSTRING1 0x00 #define INSTRING2 0x01 #define INSUBSTITUTION 0x02 #define INEXPANSION 0x04 #define STRING_ENDED 0x80 /* collation character classes */ #define CLASS_NORMAL 0x01 #define CLASS_SUBSTITUTE 0x02 #define CLASS_EXPAND 0x04 #define CLASS_COMPRESS 0x08 #define CLASS_POSITION 0x10 #define IGNORE_WEIGHT 0x00 #define POSITION_PREFIX 0x01 #define LANGVAR "LANG" #define LOCALE_LIB "LOCALE.BLL" #define MODIFIER_SYM (short) '@' #define LOCALE_STR_SYM (short) ';' #define C_LOCALE_FULL_STR "C;C;C;C;C;C;;" #define C_LOCALE_SHORT_STR "C" #define POSIX_LOCALE_FULL_STR "POSIX;POSIX;POSIX;POSIX;POSIX;POSIX;;" #define POSIX_LOCALE_SHORT_STR "POSIX" struct Collate { unsigned short CollationID; unsigned short nLevels; unsigned char LevelRules[ MAX_LEVELS ]; unsigned short nTableSize; }; struct Compression { unsigned char ElementLength; unsigned char CmpCollationElement[ MAX_COMPRESS_ELEMENT_SIZE ]; unsigned char LevelWeight[ MAX_LEVELS ]; }; struct Expansion { unsigned char ExpCollationElement; unsigned char ExpansionLength; unsigned char LevelWeight1[ MAX_LEVELS ][ MAX_EXPANSION_ELEMENT_SIZE ]; }; struct Substitution { unsigned char StringLength; unsigned char StringElement[ MAX_STRING_ELEMENT_SIZE ]; unsigned char SubstitutionLength; unsigned char SubstitutionElement[ MAX_SUBSTITUTION_ELEMENT_SIZE ]; }; struct TimeDate { unsigned char abday[ MAX_DAYS ][ MAX_ABDAY_LEN ]; unsigned char day[ MAX_DAYS ][ MAX_DAY_LEN ]; unsigned char abmon[ MAX_MONS ][ MAX_ABMON_LEN ]; unsigned char mon[ MAX_MONS ][ MAX_MON_LEN ]; unsigned char am_pm[ MAX_AMPM ][ MAX_AMPM_LEN ]; unsigned char d_t_fmt[ MAX_DTFMT_LEN ]; unsigned char d_fmt[ MAX_DTFMT_LEN ]; unsigned char t_fmt[ MAX_DTFMT_LEN ]; unsigned char t_fmt_ampm[ MAX_DTFMT_LEN ]; unsigned char era[ MAX_DTFMT_LEN ]; unsigned char era_year[ MAX_DTFMT_LEN ]; unsigned char era_d_fmt[ MAX_DTFMT_LEN ]; unsigned char alt_digits[ MAX_ALT_DIGITS * MAX_ALT_DIGIT_LEN ]; }; struct Numeric { unsigned char decimal_point[ 2 ]; unsigned char thousands_sep[ 10 ]; unsigned char grouping[ 20 ]; }; struct Monetary { unsigned char int_curr_symbol[ 5 ]; unsigned char currency_symbol[ 5 ]; unsigned char mon_decimal_point[ 2 ]; unsigned char mon_thousands_sep[ 5 ]; unsigned char mon_grouping[ 5 ]; unsigned char positive_sign[ 5 ]; unsigned char negative_sign[ 5 ]; unsigned char int_frac_digits; unsigned char frac_digits; unsigned char p_cs_precedes; unsigned char p_sep_by_space; unsigned char n_cs_precedes; unsigned char n_sep_by_space; unsigned char p_sign_posn; unsigned char n_sign_posn; }; struct Messages { unsigned char yesexpr[ 5 ]; unsigned char noexpr[ 5 ]; }; struct CategoryHeader { unsigned short CategorySize; char CategoryName[ MAX_CATNAME_LEN ]; short DefaultCategory; }; struct TimeCategory { struct CategoryHeader Header; struct TimeDate TimeDateInfo; }; struct NumericCategory { struct CategoryHeader Header; struct Numeric NumericInfo; }; struct MonetaryCategory { struct CategoryHeader Header; struct Monetary MonetaryInfo; }; struct MessagesCategory { struct CategoryHeader Header; struct Messages MessagesInfo; }; struct CollateCategory { struct CategoryHeader Header; struct Collate CollateInfo; }; struct CtypeCategory { struct CategoryHeader Header; }; struct UserCategory { struct CategoryHeader Header; void * UserInfo; }; struct LocaleVersion { unsigned char _Name[ MAX_LCNAME_LEN ]; unsigned char _Major; unsigned char _Minor; unsigned char _Revision; /* padding for word alignment */ unsigned char _Reserved; }; struct LocaleLocation { char LocaleName[ MAX_LCNAME_LEN ]; unsigned short ID; long LocaleOffset; }; struct LocaleLibraryHeader { struct LocaleVersion LocaleLibraryVersion; unsigned short nLocales; }; struct LocaleHeader { struct LocaleVersion ThisVersion; short ObjAllocType; unsigned short LocaleID; unsigned short LanguageID; /* minimum bytes in a character */ unsigned char nCharMinBytes; /* maximum bytes in a character */ unsigned char nCharMaxBytes; /* number of LC_ categories in this locale */ short nCategories; /* number of user defined LC_ categories in this locale */ short nUserDefCategories; /* LC_ categories supported: bitmap */ unsigned short CategoriesSupported; /* LC_TYPE (character type tables) */ long TypeOffset; /* LC_COLLATE (collation table area) */ long CollationOffset; /* LC_TIME (time structure area) */ long TimeOffset; /* LC_MONETARY (monetary structure area) */ long MonetaryOffset; /* LC_NUMERIC (numeric structure area) */ long NumericOffset; /* LC_MESSAGES (message table area) */ long MessagesOffset; /* LC_userdef (user defined data structures area) */ long UserDefinitionsOffset; }; struct LocaleLib { struct LocaleLibraryHeader ThisLib; struct LocaleLocation Locales; }; struct LocaleLibraryStatus { struct LocaleLibraryHeader LibHdr; struct LocaleLocation Location; struct CategoryHeader TempCatHdr; int Lhandle; const char *plocalename; int localename_len; unsigned char LoadDefaultCategory; struct LOCALEOBJECT *ptmplocale; }; struct LOCALEOBJECT { struct LocaleHeader LocaleHdr; char LocaleString[ ( LC_LAST * MAX_LCNAME_LEN ) ]; /* LC_CTYPE */ struct CtypeCategory CtypeCat; unsigned char *pCtype; unsigned char *pToLower; unsigned char *pToUpper; /* LC_COLLATE */ struct CollateCategory CollationCat; /* class and collation tables */ void *pClass; /* special collation tables */ struct Expansion *pExpandTbl; struct Compression *pCompressTbl; struct Substitution *pSubstitutionTbl; /* collation function */ int _RTLENTRY _EXPFUNC (*pcollate) ( const char *__s1, const char *__s2 ); /* collation transform function */ size_t _RTLENTRY _EXPFUNC (*ptransform) ( char *__s1, const char *__s2, size_t __n ); /* LC_MONETARY */ struct MonetaryCategory MonetaryCat; /* LC_NUMERIC */ struct NumericCategory NumericCat; /* LC_TIME */ struct TimeCategory TimeCat; /* LC_MESSAGES */ struct MessagesCategory MessagesCat; /* LC_userdef */ struct UserCategory UserCat; struct LOCALEOBJECT *pNextLocale; }; struct path_components { char _drive_[ MAXDRIVE ]; char _dir_ [ MAXDIR ]; char _name_ [ MAXFILE ]; char _ext_ [ MAXEXT ]; }; /* macros */ #define _ISLOCALESTRING( str ) \ \ ( ( (str != NULL) && strchr( str, LOCALE_STR_SYM ) != NULL ) ? 1 : 0 ) #define _CHECKVERSION( hdr ) \ \ ( ( hdr._Major == LCLIB_MAJOR_VERSION ) && ( hdr._Minor == LCLIB_MINOR_VERSION ) ? LOCALE_NO_ERROR : LOCALE_ERROR ) #define _OSFILEOPEN( filename, flags, fhandle ) \ \ ( fhandle = open( (const char *) filename, flags ) ) #define _OSFILESEEK( fhandle, offset, mode ) \ \ lseek( fhandle, offset, mode ) #define _OSFILEREAD( fhandle, buffer, nBytes, nRead ) \ \ ( nRead = read( fhandle, buffer, nBytes ) ) #define _OSFILECLOSE( fhandle ) \ \ close( fhandle ); #define _OSMEMALLOC( nitems, size ) \ \ calloc( (size_t) nitems, (size_t) size ); #define _OSMEMFREE( memptr ) \ \ free( memptr ); /* internal prototypes */ char * __lsetlocale( int __category, const char *__locale ); char * __set_c_locale( int __category ); int __find_localecat( struct LocaleLibraryStatus *__LibStatus ); int __set_localestring_locale( int __category, const char *__locale ); int __initialize_locale( void ); int _RTLENTRY _EXPFUNC __uninitialize_locale( void ); void __locale_error( struct LocaleLibraryStatus *__LibStatus, void * __MemPtr ); int __dup_locale( struct LOCALEOBJECT **__pdstlocale, struct LOCALEOBJECT **__psrclocale ); int __delete_locale( struct LOCALEOBJECT **__pdeletelocale ); int __open_localelib( struct LocaleLibraryStatus *__LibStatus ); int __open_locale( struct LocaleLibraryStatus *__LibStatus ); int __read_localecat( struct LocaleLibraryStatus *LibStatus, int __category ); char *__read_localeenv( int __category ); int __find_localelib( char *__localelib ); char *_RTLENTRY _EXPFUNC _setlocalelib( char *__fname ); void _RTLENTRY _EXPFUNC _setlocalebuff( void _FAR *__localebuff ); void _RTLENTRY _EXPFUNC _setstrxfrm ( size_t _RTLENTRY _EXPFUNC (*ptransform) ( char *, const char *, size_t ) ); void _RTLENTRY _EXPFUNC _setstrcoll ( int _RTLENTRY _EXPFUNC (*pcollate) ( const char *, const char * ) ); #if defined( _MT ) void _lock_locale( void ); void _unlock_locale( void ); void _RTLENTRY _init_locale( void ); #else #define _lock_locale() #define _unlock_locale() #define _init_locale() #endif /* externals */ extern struct LOCALEOBJECT _Clocale; #ifdef _Windows extern char *_argv0; #else extern char **_Cdecl _argv; #endif extern const char *_LocaleCatNames[ LC_LAST + 1 ]; extern struct LOCALEOBJECT *_pLocale; extern struct lconv _localeconvention; extern char _LocaleLibName[ MAXPATH + 1 ]; #define __pLocale _pLocale #endif /* ___LOCALE_H */