#ifndef __StrManip_h__
#define __StrManip_h__
/////////////////////////////////////////////////////////////////////////////
// StrManip.h : Declaration of some handy string manipulation routines.
//
/////////////////////////////////////////////////////////////////////////////
// Description: Copy characters of one string to another.
//
// This function is similar to the *_tcsncpy* function, except that, like
// *lstrcpyn*, the destination string is guaranteed to have a terminating
// null character. Rather than using *lstrcpyn*, this function is implemented
// by calling *_tcscpyn* so as to not mix C++ runtime with Windows string
// functions.
//
// Note that the buffer pointed to by /pszDest/ must be large enough to
// include a terminating null character, and the string length value
// specified by /cchMaxDest/ includes room for a terminating null character.
// Thus, the following code
//
// TCHAR szBuffer[512];
// …
// TC_tcscpyn(szBuffer, TEXT("abcdefghijklmnop"), 4) ;
//
// ... copies the string "abc", followed by a terminating null character, to
// szBuffer.
//
// Parameters:
// pszDest - Points to a buffer into which the function copies characters.
// The buffer must be large enough to contain the number of characters
// specified by /cchMaxDest/, including room for a terminating null character.
// pszSource - Points to a null-terminated string from which the function
// copies characters.
// cchMaxDest - Specifies the number of characters to be copied from the
// string pointed to by /pszSource/ into the buffer pointed to by /pszDest/,
// including a terminating null character.
//
// Return Value: This function always returns /pszDest/. No return value is
// reserved to indicate an error.
//
// See Also: *_tcsncpy*, *lstrcpyn*
inline LPTSTR TC_tcscpyn(LPTSTR pszDest, LPCTSTR pszSource, int cchMaxDest)
{
if (cchMaxDest > 0)
{
if (!pszSource)
pszSource = TEXT("");
_tcsncpy(pszDest, pszSource, cchMaxDest - 1);
pszDest[cchMaxDest - 1] = TEXT('\0');
}
return pszDest;
}
/////////////////////////////////////////////////////////////////////////////
// Search and Replace
int TCReplaceText(LPCTSTR pszSource, LPCTSTR pszFind, LPCTSTR pszReplace,
LPTSTR pszDest, int cchMaxDest, int* pnOccurrences = NULL);
int TCReplaceTextNoCase(LPCTSTR pszSource, LPCTSTR pszFind,
LPCTSTR pszReplace, LPTSTR pszDest, int cchMaxDest,
int* pnOccurrences = NULL);
/////////////////////////////////////////////////////////////////////////////
// MFC Search and Replace Wrappers
#ifdef _AFX
CString TCReplaceText(CString strSource, CString strFind,
CString strReplace, int* pnOccurrences = NULL);
int TCReplaceText(CString strSource, CString strFind, CString strReplace,
CString& strDest, int* pnOccurrences = NULL);
CString TCReplaceTextNoCase(CString strSource, CString strFind,
CString strReplace, int* pnOccurrences = NULL);
int TCReplaceTextNoCase(CString strSource, CString strFind,
CString strReplace, CString& strDest, int* pnOccurrences = NULL);
#endif // _AFX
/////////////////////////////////////////////////////////////////////////////
#endif // !__StrManip_h__