diff options
Diffstat (limited to '')
-rw-r--r-- | private/inc/tstr.h | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/private/inc/tstr.h b/private/inc/tstr.h new file mode 100644 index 000000000..afd3231a7 --- /dev/null +++ b/private/inc/tstr.h @@ -0,0 +1,299 @@ +/*++ + +Copyright (c) 1991-92 Microsoft Corporation + +Module Name: + + tstr.h + +Abstract: + + This include file contains manifests and macros to be used to integrate + the TCHAR and LPTSTR definitions + + Note that our naming convention is that a "size" indicates a number of + bytes whereas a "length" indicates a number of characters. + +Author: + + Richard Firth (rfirth) 02-Apr-1991 + +Environment: + + Portable (Win/32). + Requires ANSI C extensions: slash-slash comments, long external names, + _ultoa() routine. + +Revision History: + + 22-May-1991 Danl + Added STRSIZE macro + 19-May-1991 JohnRo + Changed some parm names to make things easier to read. + 15-May-1991 rfirth + Added TCHAR_SPACE and MAKE_TCHAR() macro + 15-Jul-1991 RFirth + Added STRING_SPACE_REQD() and DOWN_LEVEL_STRSIZE + 05-Aug-1991 JohnRo + Added MEMCPY macro. + 19-Aug-1991 JohnRo + Added character type stuff: ISDIGIT(), TOUPPER(), etc. + 20-Aug-1991 JohnRo + Changed strnicmp to _strnicmp to keep PC-LINT happy. Ditto stricmp. + 13-Sep-1991 JohnRo + Need UNICODE STRSIZE() too. + 13-Sep-1991 JohnRo + Added UNICODE STRCMP() and various others. + 18-Oct-1991 JohnRo + Added NetpCopy routines and WCSSIZE(). + 26-Nov-1991 JohnRo + Added NetpNCopy routines (like strncpy but do conversions as well). + 09-Dec-1991 rfirth + Added STRREV + 03-Jan-1992 JohnRo + Added NetpAlloc{type}From{type} routines and macros. + 09-Jan-1992 JohnRo + Added ATOL() macro and wtol() routine. + Ditto ULTOA() macro and ultow() routine. + 16-Jan-1992 Danl + Cut this info from \net\inc\tstring.h + 30-Jan-1992 JohnRo + Added STRSTR(). + Use _wcsupr() instead of wcsupr() to keep PC-LINT happy. + Added STRCMPI() and STRNCMPI(). + Fixed a few definitions which were missing MAKE_STR_FUNCTION etc. + 14-Mar-1992 JohnRo + Avoid compiler warnings using WCSSIZE(), MEMCPY(), etc. + Added TCHAR_TAB. + 09-Apr-1992 JohnRo + Prepare for WCHAR.H (_wcsicmp vs _wcscmpi, etc). + +--*/ + +#ifndef _TSTR_H_INCLUDED +#define _TSTR_H_INCLUDED + +#include <ctype.h> // isdigit(), iswdigit() eventually, etc. +#include <stdlib.h> // atol(), _ultoa(). +#include <string.h> // memcpy(), strlen(), etc. +#include <wchar.h> + +#ifdef __cplusplus +extern "C" { +#endif + +LPWSTR +ultow ( + IN DWORD Value, + OUT LPWSTR Area, + IN DWORD Radix + ); + +LONG +wtol ( + IN LPWSTR Src + ); + + +#ifdef LM20_COMPATIBLE +#define MAKE_STR_FUNCTION(s) s##f +#else +#define MAKE_STR_FUNCTION(s) s +#endif + + +#if defined(UNICODE) + +// +// function macro prototypes +// + +#define ATOL(Src) (LONG)MAKE_STR_FUNCTION(wtol)(Src) + +#define ISALNUM(tchar) iswalnum(tchar) // locale-dependent. +#define ISALPHA(tchar) iswalpha(tchar) // locale-dependent. +#define ISCNTRL(tchar) iswcntrl(tchar) // locale-dependent. +#define ISDIGIT(tchar) iswdigit(tchar) +#define ISGRAPH(tchar) iswgraph(tchar) // locale-dependent. +#define ISLOWER(tchar) iswlower(tchar) // locale-dependent. +#define ISPRINT(tchar) iswprint(tchar) // locale-dependent. +#define ISPUNCT(tchar) iswpunct(tchar) // locale-dependent. +#define ISSPACE(tchar) iswspace(tchar) // locale-dependent. +#define ISUPPER(tchar) iswupper(tchar) // locale-dependent. +#define ISXDIGIT(tchar) iswxdigit(tchar) + +#define STRCAT(dest, src) (LPTSTR)MAKE_STR_FUNCTION(wcscat)((dest), (src)) +#define STRCHR(s1, c) (LPTSTR)MAKE_STR_FUNCTION(wcschr)((s1), (c)) +#define STRCPY(dest, src) (LPTSTR)MAKE_STR_FUNCTION(wcscpy)((dest), (src)) +#define STRCSPN(s, c) (DWORD)MAKE_STR_FUNCTION(wcscspn)((s), (c)) +// STRLEN: Get character count of s. +#define STRLEN(s) (DWORD)MAKE_STR_FUNCTION(wcslen)(s) +#define STRNCAT(dest, src, n) \ + (LPTSTR)MAKE_STR_FUNCTION(wcsncat)((dest), (src), (n)) +#define STRNCPY(dest, src, n) \ + (LPTSTR)MAKE_STR_FUNCTION(wcsncpy)((dest), (src), (n)) +#define STRSPN(s1, s2) (DWORD)MAKE_STR_FUNCTION(wcsspn)((s1), (s2)) +#define STRRCHR (LPTSTR)MAKE_STR_FUNCTION(wcsrchr) +#define STRSTR (LPTSTR)MAKE_STR_FUNCTION(wcswcs) +#define STRUPR(s) (LPTSTR)MAKE_STR_FUNCTION(_wcsupr)(s) + +// these don't have formal parameters because we want to take the address of +// the mapped function in certain cases. Modify as appropriate. +// Note that for these functions, lengths are in characters. + +// compare functions: len is maximum number of characters being compared. +#define STRCMP (LONG)MAKE_STR_FUNCTION(wcscmp) +#define STRCMPI (LONG)MAKE_STR_FUNCTION(_wcsicmp) +#define STRICMP (LONG)MAKE_STR_FUNCTION(_wcsicmp) +#define STRNCMP (LONG)MAKE_STR_FUNCTION(wcsncmp) +#define STRNCMPI (LONG)MAKE_STR_FUNCTION(_wcsnicmp) +#define STRNICMP (LONG)MAKE_STR_FUNCTION(_wcsnicmp) + +#define TOLOWER(tchar) towlower(tchar) // locale-dependent. +#define TOUPPER(tchar) towupper(tchar) // locale-dependent. + +#define ULTOA(Value,Result,Radix) \ + (LPTSTR)MAKE_STR_FUNCTION(ultow)( (Value), (Result), (Radix) ) + +// +// manifests +// + +#define _CHAR_TYPE WCHAR + +#else // not UNICODE + +// +// function macro prototypes +// + +#define ATOL(Src) (LONG)MAKE_STR_FUNCTION(atol)(Src) + +#define ISALNUM(tchar) isalnum(tchar) // locale-dependent. +#define ISALPHA(tchar) isalpha(tchar) // locale-dependent. +#define ISCNTRL(tchar) iscntrl(tchar) // locale-dependent. +#define ISDIGIT(tchar) isdigit(tchar) +#define ISGRAPH(tchar) isgraph(tchar) // locale-dependent. +#define ISLOWER(tchar) islower(tchar) // locale-dependent. +#define ISPRINT(tchar) isprint(tchar) // locale-dependent. +#define ISPUNCT(tchar) ispunct(tchar) // locale-dependent. +#define ISSPACE(tchar) isspace(tchar) // locale-dependent. +#define ISUPPER(tchar) isupper(tchar) // locale-dependent. +#define ISXDIGIT(tchar) isxdigit(tchar) + +#define STRCAT(dest, src) (LPTSTR)MAKE_STR_FUNCTION(strcat)((dest), (src)) +#define STRNCAT(dest, src, n) \ + (LPTSTR)MAKE_STR_FUNCTION(strncat)((dest), (src), (n)) +// STRLEN: Get character count of s. +#define STRLEN(s) (DWORD)MAKE_STR_FUNCTION(strlen)(s) +#define STRSPN(s1, s2) (DWORD)MAKE_STR_FUNCTION(strspn)((s1), (s2)) +#define STRCSPN(s, c) (DWORD)MAKE_STR_FUNCTION(strcspn)((s), (c)) +#define STRCPY(dest, src) (LPTSTR)MAKE_STR_FUNCTION(strcpy)((dest), (src)) +#define STRNCPY(dest, src, n) \ + (LPTSTR)MAKE_STR_FUNCTION(strncpy)((dest), (src), (n)) +#define STRCHR(s1, c) (LPTSTR)MAKE_STR_FUNCTION(strchr)((s1), (c)) +#define STRRCHR (LPTSTR)MAKE_STR_FUNCTION(strrchr) +#define STRSTR (LPTSTR)MAKE_STR_FUNCTION(strstr) +#define STRUPR(s) (LPTSTR)MAKE_STR_FUNCTION(strupr)(s) +#define STRREV(s) (LPTSTR)MAKE_STR_FUNCTION(strrev)(s) + +// these don't have formal parameters because we want to take the address of +// the mapped function in certain cases. Modify as appropriate. +// Note that for these functions, lengths are in characters. + +// compare functions: len is maximum number of characters being compared. +#define STRCMP (LONG)MAKE_STR_FUNCTION(strcmp) +#define STRCMPI (LONG)MAKE_STR_FUNCTION(_stricmp) +#define STRICMP (LONG)MAKE_STR_FUNCTION(_stricmp) +#define STRNCMP (LONG)MAKE_STR_FUNCTION(strncmp) +#define STRNCMPI (LONG)MAKE_STR_FUNCTION(_strnicmp) +#define STRNICMP (LONG)MAKE_STR_FUNCTION(_strnicmp) + +#define TOLOWER(tchar) tolower(tchar) // locale-dependent. +#define TOUPPER(tchar) toupper(tchar) // locale-dependent. + +#define ULTOA(Value,Result,Radix) \ + (LPTSTR)MAKE_STR_FUNCTION(_ultoa)( (Value), (Result), (Radix) ) + +// +// manifests +// + +#define _CHAR_TYPE TCHAR + +#endif // not UNICODE + + +// +// For the memory routines, the counts are always BYTE counts. +// +#define MEMCPY MAKE_STR_FUNCTION(memcpy) +#define MEMMOVE MAKE_STR_FUNCTION(memmove) + +// +// These are used to determine the number of bytes (including the NUL +// terminator) in a string. This will generally be used when +// calculating the size of a string for allocation purposes. +// + +#define STRSIZE(p) ((STRLEN(p)+1) * sizeof(TCHAR)) +#define WCSSIZE(s) ((MAKE_STR_FUNCTION(wcslen)(s)+1) * sizeof(WCHAR)) + + +// +// character literals (both types) +// + +#define TCHAR_EOS ((_CHAR_TYPE)'\0') +#define TCHAR_STAR ((_CHAR_TYPE)'*') +#define TCHAR_BACKSLASH ((_CHAR_TYPE)'\\') +#define TCHAR_FWDSLASH ((_CHAR_TYPE)'/') +#define TCHAR_COLON ((_CHAR_TYPE)':') +#define TCHAR_DOT ((_CHAR_TYPE)'.') +#define TCHAR_SPACE ((_CHAR_TYPE)' ') +#define TCHAR_TAB ((_CHAR_TYPE)'\t') + + +// +// General purpose macro for casting character types to whatever type in vogue +// (as defined in this file) +// + +#define MAKE_TCHAR(c) ((_CHAR_TYPE)(c)) + +// +// IS_PATH_SEPARATOR +// +// lifted from curdir.c and changed to use TCHAR_ character literals, checks +// if a character is a path separator i.e. is a member of the set [\/] +// + +#define IS_PATH_SEPARATOR(ch) ((ch == TCHAR_BACKSLASH) || (ch == TCHAR_FWDSLASH)) + +// +// The following 2 macros lifted from I_Net canonicalization files +// + +#define IS_DRIVE(c) ISALPHA(c) +#define IS_NON_ZERO_DIGIT(c) (((c) >= MAKE_TCHAR('1')) && ((c) <= MAKE_TCHAR('9'))) + +// +// STRING_SPACE_REQD returns a number (of bytes) corresponding to the space +// required in which (n) characters can be accomodated +// + +#define STRING_SPACE_REQD(n) ((n) * sizeof(_CHAR_TYPE)) + +// +// DOWN_LEVEL_STRLEN returns the number of single-byte characters necessary to +// store a converted _CHAR_TYPE string. This will be WCHAR (or wchar_t) if +// UNICODE is defined or CHAR (or char) otherwise +// + +#define DOWN_LEVEL_STRSIZE(n) ((n) / sizeof(_CHAR_TYPE)) + +#ifdef __cplusplus +} +#endif + +#endif // _TSTR_H_INCLUDED |