Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*****************************************************************/ /** Microsoft Windows for Workgroups **/ /** Copyright (C) Microsoft Corp., 1991-1992 **/ /*****************************************************************/
/*
strmisc.cxx Miscellaneous members of the string classes
The NLS_STR and ISTR classes have many inline member functions which bloat clients, especially in debug versions. This file gives those unhappy functions a new home.
FILE HISTORY: beng 04/26/91 Created (relocated from string.hxx) gregj 05/22/92 Added ToOEM, ToAnsi methods
*/
#include "npcommon.h"
extern "C" { #include <netlib.h>
}
#if defined(DEBUG)
static const CHAR szFileName[] = __FILE__; #define _FILENAME_DEFINED_ONCE szFileName
#endif
#include <npassert.h>
#include <npstring.h>
#ifdef DEBUG
/*******************************************************************
NAME: NLS_STR::CheckIstr
SYNOPSIS: Checks association between ISTR and NLS_STR instances
ENTRY: istr - ISTR to check against this NLS_STR
NOTES: Does nothing in retail build.
HISTORY: beng 07/23/91 Header added; removed redundant "nls" parameter.
********************************************************************/
VOID NLS_STR::CheckIstr( const ISTR& istr ) const { UIASSERT( (istr).QueryPNLS() == this ); UIASSERT( (istr).QueryVersion() == QueryVersion() ); }
VOID NLS_STR::IncVers() { _usVersion++; }
VOID NLS_STR::InitializeVers() { _usVersion = 0; }
VOID NLS_STR::UpdateIstr( ISTR *pistr ) const { pistr->SetVersion( QueryVersion() ); }
USHORT NLS_STR::QueryVersion() const { return _usVersion; }
const CHAR * NLS_STR::QueryPch() const { if (QueryError()) { UIASSERT(FALSE); return NULL; }
return _pchData; }
const CHAR * NLS_STR::QueryPch( const ISTR& istr ) const { if (QueryError()) return NULL;
CheckIstr( istr ); return _pchData+istr.QueryIB(); }
WCHAR NLS_STR::QueryChar( const ISTR& istr ) const { if (QueryError()) return 0;
CheckIstr( istr ); return *(_pchData+istr.QueryIB()); } #endif // DEBUG
/*******************************************************************
NAME: NLS_STR::ToOEM
SYNOPSIS: Convert string to OEM character set
ENTRY: No parameters
EXIT: String is in OEM character set
RETURNS:
NOTES: If the string is already OEM, nothing happens. A string may be constructed as OEM by constructing as usual, then calling SetOEM(). Casemap conversion does NOT work on OEM strings!
HISTORY: gregj 05/22/92 Created
********************************************************************/
VOID NLS_STR::ToOEM() { if (IsOEM()) return; // string is already OEM
SetOEM();
#ifdef WIN31
::AnsiToOem( _pchData, _pchData ); #endif
}
/*******************************************************************
NAME: NLS_STR::ToAnsi
SYNOPSIS: Convert string to ANSI character set
ENTRY: No parameters
EXIT: String is in ANSI character set
RETURNS:
NOTES: If the string is already ANSI (the default), nothing happens.
HISTORY: gregj 05/22/92 Created
********************************************************************/
VOID NLS_STR::ToAnsi() { if (!IsOEM()) return; // string is already ANSI
SetAnsi();
#ifdef WIN31
::OemToAnsiBuff( _pchData, _pchData, _cbData); #endif
}
/*******************************************************************
NAME: NLS_STR::SetOEM
SYNOPSIS: Declares string to be in OEM character set
ENTRY: No parameters
EXIT: OEM flag set
RETURNS:
NOTES: Use this method if you construct a string which is known to be in the OEM character set (e.g., it came back from a Net API).
HISTORY: gregj 05/22/92 Created
********************************************************************/
VOID NLS_STR::SetOEM() { _fsFlags |= SF_OEM; }
/*******************************************************************
NAME: NLS_STR::SetAnsi
SYNOPSIS: Declares string to be in ANSI character set
ENTRY: No parameters
EXIT: OEM flag set
RETURNS:
NOTES: This method is used primarily by NLS_STR itself, when an ANSI string is assigned to a previously OEM one.
HISTORY: gregj 05/22/92 Created
********************************************************************/
VOID NLS_STR::SetAnsi() { _fsFlags &= ~SF_OEM; }
/*******************************************************************
NAME: NLS_STR::IsDBCSLeadByte
SYNOPSIS: Returns whether a character is a lead byte or not
ENTRY: ch - byte to check
EXIT: TRUE if "ch" is a lead byte
RETURNS:
NOTES: This method works whether the string is OEM or ANSI. In a non-DBCS build, this function is inline and always returns FALSE.
HISTORY: gregj 04/02/93 Created
********************************************************************/
BOOL NLS_STR::IsDBCSLeadByte( CHAR ch ) const { return IS_LEAD_BYTE(ch); }
|