// ********************************************************* // カンマ区切りの文字列リストに指定した文字列があるかどうか // 戻り値 : リストにある場合は true, 無ければ false // ********************************************************* BOOL LboxStringCase( LPTSTR pszBuffer, LPCTSTR pszList ) { unsigned char *pszToken; int nSize; nSize = lstrlen( pszList ) + 10; char *pszLocal = new char[nSize]; lstrcpy( pszLocal, pszList ); pszToken = _mbstok( (unsigned char *)pszLocal, (const unsigned char *)"," ); while( pszToken != NULL ) { if ( lstrcmp( (char *)pszToken, pszBuffer ) == 0 ) { delete [] pszLocal; return true; } pszToken = _mbstok( NULL, (const unsigned char *)"," ); } delete [] pszLocal; return false; }
// ********************************************************* // 大文字小文字区別無し Case // 戻り値 : リストにある場合は true, 無ければ false // ********************************************************* BOOL LboxStringCaseX( LPTSTR pszBuffer, LPCTSTR pszList ) { unsigned char *pszToken; int nSize; nSize = lstrlen( pszList ) + 10; char *pszLocal = new char[nSize]; lstrcpy( pszLocal, pszList ); pszToken = _mbstok( (unsigned char *)pszLocal, (const unsigned char *)"," ); while( pszToken != NULL ) { if ( lstrcmpi( (char *)pszToken, pszBuffer ) == 0 ) { delete [] pszLocal; return true; } pszToken = _mbstok( NULL, (const unsigned char *)"," ); } delete [] pszLocal; return false; }
// ********************************************************* // 文字列を指定した文字で囲む // 既にその文字で囲まれている場合はなにもしない // 戻り値 : 無し // ********************************************************* void LboxStringEnclose( LPTSTR pszBuffer, int c ) { if ( pszBuffer[0] == (char)c && pszBuffer[lstrlen(pszBuffer)-1] == (char)c ) { return; } pszBuffer[lstrlen(pszBuffer)+1] = 0x00; pszBuffer[lstrlen(pszBuffer)+2] = 0x00; MoveMemory( pszBuffer + 1, pszBuffer, lstrlen( pszBuffer ) ); pszBuffer[0] = (char)c; pszBuffer[lstrlen(pszBuffer)] = (char)c; } void LboxStringEnclose( LPTSTR pszBuffer, int c1, int c2 ) { if ( pszBuffer[0] == (char)c1 && pszBuffer[lstrlen(pszBuffer)-1] == (char)c2 ) { return; } pszBuffer[lstrlen(pszBuffer)+1] = 0x00; pszBuffer[lstrlen(pszBuffer)+2] = 0x00; MoveMemory( pszBuffer + 1, pszBuffer, lstrlen( pszBuffer ) ); pszBuffer[0] = (char)c1; pszBuffer[lstrlen(pszBuffer)] = (char)c2; }
// ********************************************************* // 文字列が指定した文字で囲まれていたらその文字を取り去る // 戻り値 : 無し // ********************************************************* void LboxStringRemoveEnclose( LPTSTR pszBuffer, int c ) { if ( pszBuffer[0] == (char)c && pszBuffer[lstrlen(pszBuffer)-1] == (char)c ) { MoveMemory( pszBuffer, pszBuffer + 1, lstrlen( pszBuffer ) ); pszBuffer[lstrlen(pszBuffer)-1] = 0x00; } } void LboxStringRemoveEnclose( LPTSTR pszBuffer, int c1, int c2 ) { if ( pszBuffer[0] == (char)c1 && pszBuffer[lstrlen(pszBuffer)-1] == (char)c2 ) { MoveMemory( pszBuffer, pszBuffer + 1, lstrlen( pszBuffer ) ); pszBuffer[lstrlen(pszBuffer)-1] = 0x00; } }
// ********************************************************* // グローバルメモリの取得・再取得 // 戻り値 : 文字列へのポインタ // ********************************************************* LPTSTR LboxReAlloc( LPTSTR *lpTarget, DWORD dwNewSize ) { if ( *lpTarget == NULL ) { *lpTarget = (char *)GlobalAlloc( GMEM_FIXED, dwNewSize+128 ); if ( *lpTarget == NULL ) { return NULL; } ZeroMemory( *lpTarget, dwNewSize+10 ); } else { LPTSTR lpWork; lpWork = (LPTSTR)GlobalAlloc( GMEM_FIXED, dwNewSize+128 ); if ( lpWork != NULL ) { DWORD nSize; ZeroMemory( lpWork, dwNewSize+10 ); nSize = GlobalSize( (HGLOBAL)(*lpTarget) ); if ( nSize > dwNewSize ) { CopyMemory( lpWork, *lpTarget, dwNewSize+10 ); } else { CopyMemory( lpWork, *lpTarget, nSize-10 ); } } GlobalFree( (HGLOBAL)(*lpTarget) ); *lpTarget = lpWork; } return *lpTarget; }