/****************************************************************************\ 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 #include // // 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; }