307 lines
8.8 KiB
C
307 lines
8.8 KiB
C
|
|
/****************************************************************************\
|
|
|
|
STRAPI.C / OPK Wizard (OPKWIZ.EXE)
|
|
|
|
Microsoft Confidential
|
|
Copyright (c) Microsoft Corporation 1999
|
|
All rights reserved
|
|
|
|
String API source file for generic APIs used in the OPK Wizard.
|
|
|
|
4/99 - Jason Cohen (JCOHEN)
|
|
Added this new source file for the OPK Wizard as part of the
|
|
Millennium rewrite.
|
|
7/00 - Brian Ku (BRIANK)
|
|
Added to Whistler
|
|
|
|
\****************************************************************************/
|
|
|
|
|
|
//
|
|
// Include file(s)
|
|
//
|
|
|
|
#include <pch.h>
|
|
#include <tchar.h>
|
|
|
|
|
|
//
|
|
// Internal Defined Value(s):
|
|
//
|
|
|
|
#define NULLCHR _T('\0')
|
|
|
|
|
|
//
|
|
// External Function(s):
|
|
//
|
|
|
|
/****************************************************************************\
|
|
|
|
LPTSTR // Returns a pointer to the first occurance of a
|
|
// character in a string, or NULL if the
|
|
// character isn't found.
|
|
|
|
StrChr( // Searches a string for a particular character.
|
|
|
|
LPCTSTR lpString, // Points to a string buffer to search.
|
|
|
|
TCHAR cSearch // Character to search for.
|
|
|
|
);
|
|
|
|
\****************************************************************************/
|
|
#ifndef _INC_SHLWAPI
|
|
LPTSTR StrChr(LPCTSTR lpString, TCHAR cSearch)
|
|
{
|
|
// Validate the parameters passed in.
|
|
//
|
|
if ( ( lpString == NULL ) || ( *lpString == NULLCHR ) )
|
|
return NULL;
|
|
|
|
// Go through the string until the character is found,
|
|
// or we hit the null terminator.
|
|
//
|
|
while ( ( *lpString != cSearch ) && ( *(lpString = CharNext(lpString)) ) );
|
|
|
|
// If we didn't find it, null the pointer out.
|
|
//
|
|
if ( *lpString != cSearch )
|
|
lpString = NULL;
|
|
|
|
// Return either null or a pointer to the found character.
|
|
//
|
|
return (LPTSTR) lpString;
|
|
}
|
|
|
|
/****************************************************************************\
|
|
|
|
LPTSTR // Returns a pointer to the last occurance of a
|
|
// character in a string, or NULL if the
|
|
// character isn't found.
|
|
|
|
StrRChr( // Searches a string for a particular character.
|
|
|
|
LPCTSTR lpString, // Points to a string buffer to search.
|
|
|
|
TCHAR cSearch // Character to search for.
|
|
|
|
);
|
|
|
|
\****************************************************************************/
|
|
|
|
LPTSTR StrRChr(LPCTSTR lpString, TCHAR cSearch)
|
|
{
|
|
LPTSTR lpSearch;
|
|
|
|
// Validate the parameters passed in.
|
|
//
|
|
if ( ( lpString == NULL ) || ( *lpString == NULLCHR ) )
|
|
return NULL;
|
|
|
|
// Go back through the string until the character is found,
|
|
// or we hit the begining of the string.
|
|
//
|
|
for ( lpSearch = (LPTSTR) lpString + lstrlen(lpString);
|
|
( lpSearch > lpString ) && ( *lpSearch != cSearch );
|
|
lpSearch = CharPrev(lpString, lpSearch));
|
|
|
|
// If we didn't find it, null the pointer out.
|
|
//
|
|
if ( *lpSearch != cSearch )
|
|
lpSearch = NULL;
|
|
|
|
// Return either null or a pointer to the found character.
|
|
//
|
|
return (LPTSTR) lpSearch;
|
|
}
|
|
#endif // _INC_SHLWAPI
|
|
|
|
/****************************************************************************\
|
|
|
|
LPTSTR // Returns a pointer to the string buffer passed
|
|
// in.
|
|
|
|
StrRem( // Searches a string for a particular character
|
|
// and removes that character from the string in
|
|
// place.
|
|
|
|
LPCTSTR lpString, // Points to a string buffer to search and remove
|
|
// the characters from.
|
|
|
|
TCHAR cRemove // Character to search for and remove.
|
|
|
|
);
|
|
|
|
\****************************************************************************/
|
|
|
|
LPTSTR StrRem(LPTSTR lpString, TCHAR cRemove)
|
|
{
|
|
LPTSTR lpSearch;
|
|
|
|
// Validate the parameters passed in.
|
|
//
|
|
if ( ( lpString == NULL ) || ( *lpString == NULLCHR ) || ( cRemove == NULLCHR ) )
|
|
return lpString;
|
|
|
|
// Search the string for the character we want to remove.
|
|
// Everytime we find it, shift the string over a character
|
|
// to remove it.
|
|
//
|
|
for ( lpSearch = StrChr(lpString, cRemove); lpSearch; lpSearch = StrChr(lpSearch, cRemove) )
|
|
lstrcpy(lpSearch, lpSearch + 1);
|
|
|
|
// Return the pointer to the string passed in.
|
|
//
|
|
return lpString;
|
|
}
|
|
|
|
/****************************************************************************\
|
|
|
|
LPTSTR // Returns a pointer to the string buffer passed
|
|
// in.
|
|
|
|
StrRTrm( // Searches a string for a particular ending
|
|
// character, and removes all of them from the
|
|
// ending of the string.
|
|
|
|
LPCTSTR lpString, // Points to a string buffer to search and remove
|
|
// the characters from.
|
|
|
|
TCHAR cTrim // Character to search for and remove.
|
|
|
|
);
|
|
|
|
\****************************************************************************/
|
|
|
|
LPTSTR StrRTrm(LPTSTR lpString, TCHAR cTrim)
|
|
{
|
|
LPTSTR lpEnd;
|
|
|
|
// Validate the parameters passed in.
|
|
//
|
|
if ( ( lpString == NULL ) || ( *lpString == NULLCHR ) || ( cTrim == NULLCHR ) )
|
|
return lpString;
|
|
|
|
// Null out the end of the string minus
|
|
// the chacters we are trimming.
|
|
//
|
|
for ( lpEnd = lpString + lstrlen(lpString); (lpEnd > lpString) && (*CharPrev(lpString, lpEnd) == cTrim); lpEnd = CharPrev(lpString, lpEnd) );
|
|
*lpEnd = NULLCHR;
|
|
|
|
return lpString;
|
|
}
|
|
|
|
/****************************************************************************\
|
|
|
|
LPTSTR // Returns a pointer to the string buffer passed
|
|
// in.
|
|
|
|
StrTrm( // Searches a string for a particular proceeding
|
|
// and ending character, and removes all of them
|
|
// from the beginning and ending of the string.
|
|
|
|
LPCTSTR lpString, // Points to a string buffer to search and remove
|
|
// the characters from.
|
|
|
|
TCHAR cTrim // Character to search for and remove.
|
|
|
|
);
|
|
|
|
\****************************************************************************/
|
|
|
|
LPTSTR StrTrm(LPTSTR lpString, TCHAR cTrim)
|
|
{
|
|
LPTSTR lpBegin;
|
|
|
|
// Validate the parameters passed in.
|
|
//
|
|
if ( ( lpString == NULL ) || ( *lpString == NULLCHR ) || ( cTrim == NULLCHR ) )
|
|
return lpString;
|
|
|
|
// Get a pointer to the begining of the string
|
|
// minus the characters we are trimming.
|
|
//
|
|
for ( lpBegin = lpString; *lpBegin == cTrim; lpBegin = CharNext(lpBegin) );
|
|
|
|
// Make sure we didn't hit the null terminator.
|
|
//
|
|
if ( *lpBegin == NULLCHR )
|
|
{
|
|
*lpString = NULLCHR;
|
|
return lpString;
|
|
}
|
|
|
|
// Null out the end of the string minus
|
|
// the chacters we are trimming.
|
|
//
|
|
StrRTrm(lpBegin, cTrim);
|
|
|
|
// Now we may need to move the string to the beginning
|
|
// of the buffer if we trimmed of proceeding characters.
|
|
//
|
|
if ( lpBegin > lpString )
|
|
lstrcpy(lpString, lpBegin);
|
|
|
|
return lpString;
|
|
}
|
|
|
|
/****************************************************************************\
|
|
|
|
LPTSTR // Returns a pointer to the string a character in
|
|
// the string passed in.
|
|
|
|
StrMov( // Moves a pointer forward or backward the number
|
|
// of characters passed in.
|
|
|
|
LPCTSTR lpStart, // Pointer to the begining of the string buffer.
|
|
// This may only be NULL if nCount is positive.
|
|
|
|
LPCTSTR lpCurrent, // Pointer to a character in the null-terminated
|
|
// string.
|
|
|
|
INT nCount // Number of characters to move the pointer,
|
|
// forward if it is a positive value, backward
|
|
// if it is negative.
|
|
|
|
);
|
|
|
|
\****************************************************************************/
|
|
|
|
LPTSTR StrMov(LPTSTR lpStart, LPTSTR lpCurrent, INT nCount)
|
|
{
|
|
// Validate the parameters.
|
|
//
|
|
if ( ( lpCurrent == NULL ) ||
|
|
( ( lpStart == NULL ) && ( nCount < 0 ) ) )
|
|
{
|
|
return lpCurrent;
|
|
}
|
|
|
|
// Loop throuh until we don't need to move the pointer anymore.
|
|
//
|
|
while ( nCount != 0 )
|
|
{
|
|
// Check to see if we are moving forward or backward.
|
|
//
|
|
if ( nCount > 0 )
|
|
{
|
|
// Move the pointer forward one character.
|
|
//
|
|
lpCurrent = CharNext(lpCurrent);
|
|
nCount--;
|
|
}
|
|
else
|
|
{
|
|
// Move the pointer backward one character.
|
|
//
|
|
lpCurrent = CharPrev(lpStart, lpCurrent);
|
|
nCount++;
|
|
}
|
|
}
|
|
|
|
// Return the pointer to the new position.
|
|
//
|
|
return lpCurrent;
|
|
} |