\r
// マルチバイト文字列からコードポイントと次のポインタを取得\r
// エンコードが不正な場合は0x80000000を返す\r
-DWORD GetNextCharM(LPCSTR lpString, LPCSTR* ppNext)\r
+DWORD GetNextCharM(LPCSTR lpString, LPCSTR pLimit, LPCSTR* ppNext)\r
{\r
DWORD Code;\r
int i;\r
Code = 0;\r
- if((*lpString & 0xfe) == 0xfc)\r
+ i = -1;\r
+ if(!pLimit)\r
+ pLimit = (LPCSTR)(~0);\r
+ if(lpString < pLimit)\r
{\r
- i = 5;\r
- Code |= (DWORD)*lpString & 0x01;\r
- }\r
- else if((*lpString & 0xfc) == 0xf8)\r
- {\r
- i = 4;\r
- Code |= (DWORD)*lpString & 0x03;\r
+ if((*lpString & 0xfe) == 0xfc)\r
+ {\r
+ i = 5;\r
+ Code |= (DWORD)*lpString & 0x01;\r
+ }\r
+ else if((*lpString & 0xfc) == 0xf8)\r
+ {\r
+ i = 4;\r
+ Code |= (DWORD)*lpString & 0x03;\r
+ }\r
+ else if((*lpString & 0xf8) == 0xf0)\r
+ {\r
+ i = 3;\r
+ Code |= (DWORD)*lpString & 0x07;\r
+ }\r
+ else if((*lpString & 0xf0) == 0xe0)\r
+ {\r
+ i = 2;\r
+ Code |= (DWORD)*lpString & 0x0f;\r
+ }\r
+ else if((*lpString & 0xe0) == 0xc0)\r
+ {\r
+ i = 1;\r
+ Code |= (DWORD)*lpString & 0x1f;\r
+ }\r
+ else if((*lpString & 0x80) == 0x00)\r
+ {\r
+ i = 0;\r
+ Code |= (DWORD)*lpString & 0x7f;\r
+ }\r
+ lpString++;\r
+ while(lpString < pLimit && i > 0 && (*lpString & 0xc0) == 0x80)\r
+ {\r
+ i--;\r
+ Code = Code << 6;\r
+ Code |= (DWORD)*lpString & 0x3f;\r
+ lpString++;\r
+ }\r
}\r
- else if((*lpString & 0xf8) == 0xf0)\r
+ if(i != 0)\r
+ Code = 0x80000000;\r
+ if(ppNext)\r
+ *ppNext = lpString;\r
+ return Code;\r
+}\r
+\r
+// マルチバイト文字列へコードポイントの文字を追加して次のポインタを取得\r
+// 文字の長さを返す\r
+int PutNextCharM(LPSTR lpString, LPSTR pLimit, LPSTR* ppNext, DWORD Code)\r
+{\r
+ int Count;\r
+ int i;\r
+ Count = 0;\r
+ i = -1;\r
+ if(!pLimit)\r
+ pLimit = (LPSTR)(~0);\r
+ if(lpString < pLimit)\r
{\r
- i = 3;\r
- Code |= (DWORD)*lpString & 0x07;\r
+ if(Code & 0x7c000000)\r
+ {\r
+ i = 5;\r
+ *lpString = 0xfc | ((CHAR)(Code >> 30) & 0x01);\r
+ }\r
+ else if(Code & 0x03e00000)\r
+ {\r
+ i = 4;\r
+ *lpString = 0xf8 | ((CHAR)(Code >> 24) & 0x03);\r
+ }\r
+ else if(Code & 0x001f0000)\r
+ {\r
+ i = 3;\r
+ *lpString = 0xf0 | ((CHAR)(Code >> 18) & 0x07);\r
+ }\r
+ else if(Code & 0x0000f800)\r
+ {\r
+ i = 2;\r
+ *lpString = 0xe0 | ((CHAR)(Code >> 12) & 0x0f);\r
+ }\r
+ else if(Code & 0x00000780)\r
+ {\r
+ i = 1;\r
+ *lpString = 0xc0 | ((CHAR)(Code >> 6) & 0x1f);\r
+ }\r
+ else\r
+ {\r
+ i = 0;\r
+ *lpString = (CHAR)Code & 0x7f;\r
+ }\r
+ Count = i + 1;\r
+ lpString++;\r
+ while(lpString < pLimit && i > 0)\r
+ {\r
+ i--;\r
+ *lpString = 0x80 | ((CHAR)(Code >> (i * 6)) & 0x3f);\r
+ lpString++;\r
+ }\r
}\r
- else if((*lpString & 0xf0) == 0xe0)\r
+ if(i != 0)\r
+ Count = 0;\r
+ if(ppNext)\r
+ *ppNext = lpString;\r
+ return Count;\r
+}\r
+\r
+// ワイド文字列からコードポイントと次のポインタを取得\r
+// エンコードが不正な場合は0x80000000を返す\r
+DWORD GetNextCharW(LPCWSTR lpString, LPCWSTR pLimit, LPCWSTR* ppNext)\r
+{\r
+ DWORD Code;\r
+ Code = 0x80000000;\r
+ if(!pLimit)\r
+ pLimit = (LPCWSTR)(~0);\r
+ if(lpString < pLimit)\r
{\r
- i = 2;\r
- Code |= (DWORD)*lpString & 0x0f;\r
+ if((*lpString & 0xf800) == 0xd800)\r
+ {\r
+ if((*lpString & 0x0400) == 0x0400)\r
+ {\r
+ Code = (DWORD)*lpString & 0x03ff;\r
+ lpString++;\r
+ if(lpString < pLimit)\r
+ {\r
+ if((*lpString & 0x0400) == 0x0000)\r
+ {\r
+ Code |= ((DWORD)*lpString & 0x03ff) << 10;\r
+ lpString++;\r
+ }\r
+ else\r
+ Code = 0x80000000;\r
+ }\r
+ else\r
+ Code = 0x80000000;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Code = (DWORD)*lpString;\r
+ lpString++;\r
+ }\r
}\r
- else if((*lpString & 0xe0) == 0xc0)\r
+ if(ppNext)\r
+ *ppNext = lpString;\r
+ return Code;\r
+}\r
+\r
+// ワイド文字列へコードポイントの文字を追加して次のポインタを取得\r
+// 文字の長さを返す\r
+int PutNextCharW(LPWSTR lpString, LPWSTR pLimit, LPWSTR* ppNext, DWORD Code)\r
+{\r
+ int Count;\r
+ Count = 0;\r
+ if(!pLimit)\r
+ pLimit = (LPWSTR)(~0);\r
+ if(lpString < pLimit)\r
{\r
- i = 1;\r
- Code |= (DWORD)*lpString & 0x1f;\r
+ if((Code & 0x7fff0000) || (Code & 0x0000f800) == 0x0000d800)\r
+ {\r
+ *lpString = 0xdc00 | ((WCHAR)Code & 0x03ff);\r
+ lpString++;\r
+ if(lpString < pLimit)\r
+ {\r
+ *lpString = 0xd800 | ((WCHAR)(Code >> 10) & 0x03ff);\r
+ lpString++;\r
+ Count = 2;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ *lpString = (WCHAR)Code;\r
+ lpString++;\r
+ Count = 1;\r
+ }\r
}\r
- else if((*lpString & 0x80) == 0x00)\r
+ if(ppNext)\r
+ *ppNext = lpString;\r
+ return Count;\r
+}\r
+\r
+// マルチバイト文字列のコードポイントの個数を取得\r
+int GetCodeCountM(LPCSTR lpString, int CharCount)\r
+{\r
+ int Count;\r
+ LPCSTR pLimit;\r
+ DWORD Code;\r
+ Count = 0;\r
+ if(CharCount == -1)\r
+ pLimit = lpString + strlen(lpString);\r
+ else\r
+ pLimit = lpString + CharCount;\r
+ while(lpString < pLimit)\r
{\r
- i = 0;\r
- Code |= (DWORD)*lpString & 0x7f;\r
+ Code = GetNextCharM(lpString, pLimit, &lpString);\r
+ if(Code == 0x80000000)\r
+ continue;\r
+ Count++;\r
}\r
+ return Count;\r
+}\r
+\r
+// ワイド文字列のコードポイントの個数を取得\r
+int GetCodeCountW(LPCWSTR lpString, int CharCount)\r
+{\r
+ int Count;\r
+ LPCWSTR pLimit;\r
+ DWORD Code;\r
+ Count = 0;\r
+ if(CharCount == -1)\r
+ pLimit = lpString + wcslen(lpString);\r
else\r
- i = -1;\r
- lpString++;\r
- while((*lpString & 0xc0) == 0x80)\r
+ pLimit = lpString + CharCount;\r
+ while(lpString < pLimit)\r
{\r
- i--;\r
- Code = Code << 6;\r
- Code |= (DWORD)*lpString & 0x3f;\r
- lpString++;\r
+ Code = GetNextCharW(lpString, pLimit, &lpString);\r
+ if(Code == 0x80000000)\r
+ continue;\r
+ Count++;\r
}\r
- if(i != 0)\r
- Code = 0x80000000;\r
- if(ppNext)\r
- *ppNext = lpString;\r
- return Code;\r
+ return Count;\r
}\r
\r
// マルチバイト文字列の冗長表現を修正\r
p = (char*)pSrc;\r
while(*pSrc != '\0')\r
{\r
- Code = GetNextCharM(pSrc, &pSrc);\r
+ Code = GetNextCharM(pSrc, NULL, &pSrc);\r
if(Code & 0x80000000)\r
continue;\r
else if(Code & 0x7c000000)\r
free(p);\r
}\r
\r
+// マルチバイト文字列からワイド文字列へ変換\r
+// UTF-8からUTF-16 LEへの変換専用\r
+int MultiByteToWideCharAlternative(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar)\r
+{\r
+ int WideCount;\r
+ LPCSTR pMultiLimit;\r
+ LPWSTR pWideLimit;\r
+ DWORD Code;\r
+ int TempCount;\r
+ WCHAR Temp[8];\r
+ if(CodePage != CP_UTF8 || dwFlags != 0)\r
+ return MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar);\r
+ WideCount = 0;\r
+ if(cbMultiByte == -1)\r
+ pMultiLimit = lpMultiByteStr + strlen(lpMultiByteStr) + 1;\r
+ else\r
+ pMultiLimit = lpMultiByteStr + cbMultiByte;\r
+ pWideLimit = lpWideCharStr + cchWideChar;\r
+ while(lpMultiByteStr < pMultiLimit)\r
+ {\r
+ Code = GetNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr);\r
+ if(Code == 0x80000000)\r
+ continue;\r
+ if(lpWideCharStr)\r
+ {\r
+ TempCount = PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);\r
+ WideCount += TempCount;\r
+ if(TempCount == 0 && lpWideCharStr >= pWideLimit)\r
+ {\r
+ WideCount = 0;\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ WideCount += PutNextCharW(Temp, NULL, NULL, Code);\r
+ }\r
+ return WideCount;\r
+}\r
+\r
+// ワイド文字列からマルチバイト文字列へ変換\r
+// UTF-16 LEからUTF-8への変換専用\r
+int WideCharToMultiByteAlternative(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar)\r
+{\r
+ int MultiCount;\r
+ LPCWSTR pWideLimit;\r
+ LPSTR pMultiLimit;\r
+ DWORD Code;\r
+ int TempCount;\r
+ CHAR Temp[8];\r
+ if(CodePage != CP_UTF8 || dwFlags != 0)\r
+ return WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar);\r
+ MultiCount = 0;\r
+ if(cchWideChar == -1)\r
+ pWideLimit = lpWideCharStr + wcslen(lpWideCharStr) + 1;\r
+ else\r
+ pWideLimit = lpWideCharStr + cchWideChar;\r
+ pMultiLimit = lpMultiByteStr + cbMultiByte;\r
+ while(lpWideCharStr < pWideLimit)\r
+ {\r
+ Code = GetNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr);\r
+ if(Code == 0x80000000)\r
+ continue;\r
+ if(lpMultiByteStr)\r
+ {\r
+ TempCount = PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);\r
+ MultiCount += TempCount;\r
+ if(TempCount == 0 && lpMultiByteStr >= pMultiLimit)\r
+ {\r
+ MultiCount = 0;\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ MultiCount += PutNextCharM(Temp, NULL, NULL, Code);\r
+ }\r
+ if(lpUsedDefaultChar)\r
+ *lpUsedDefaultChar = FALSE;\r
+ return MultiCount;\r
+}\r
+\r
// 以下ラッパー\r
// 戻り値バッファ r\r
// ワイド文字バッファ pw%d\r
return r;\r
}\r
\r
+HANDLE FindFirstChangeNotificationM(LPCSTR lpPathName, BOOL bWatchSubtree, DWORD dwNotifyFilter)\r
+{\r
+ HANDLE r = INVALID_HANDLE_VALUE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = FindFirstChangeNotificationW(pw0, bWatchSubtree, dwNotifyFilter);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer)\r
{\r
DWORD r = 0;\r
ATOM RegisterClassExM(CONST WNDCLASSEXA * v0)\r
{\r
ATOM r = 0;\r
+ wchar_t* pw0 = NULL;\r
+ wchar_t* pw1 = NULL;\r
+ WNDCLASSEXW a0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
- r = RegisterClassExA(v0);\r
+ a0.cbSize = sizeof(WNDCLASSEXW);\r
+ a0.style = v0->style;\r
+ a0.lpfnWndProc = v0->lpfnWndProc;\r
+ a0.cbClsExtra = v0->cbClsExtra;\r
+ a0.cbWndExtra = v0->cbWndExtra;\r
+ a0.hInstance = v0->hInstance;\r
+ a0.hIcon = v0->hIcon;\r
+ a0.hCursor = v0->hCursor;\r
+ a0.hbrBackground = v0->hbrBackground;\r
+ pw0 = DuplicateMtoW(v0->lpszMenuName, -1);\r
+ a0.lpszMenuName = pw0;\r
+ pw1 = DuplicateMtoW(v0->lpszClassName, -1);\r
+ a0.lpszClassName = pw1;\r
+ a0.hIconSm = v0->hIconSm;\r
+ r = RegisterClassExW(&a0);\r
END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ FreeDuplicatedString(pw1);\r
return r;\r
}\r
\r
{\r
LONG r = 0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
if(IsWindowUnicode(hWnd))\r
r = GetWindowLongW(hWnd, nIndex);\r
else\r
{\r
LONG r = 0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
if(IsWindowUnicode(hWnd))\r
r = SetWindowLongW(hWnd, nIndex, dwNewLong);\r
else\r
{\r
LONG_PTR r = 0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
if(IsWindowUnicode(hWnd))\r
r = GetWindowLongPtrW(hWnd, nIndex);\r
else\r
{\r
LONG_PTR r = 0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
if(IsWindowUnicode(hWnd))\r
r = SetWindowLongPtrW(hWnd, nIndex, dwNewLong);\r
else\r
{\r
LRESULT r = 0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
if(IsWindowUnicode(hWnd))\r
r = DefWindowProcW(hWnd, Msg, wParam, lParam);\r
else\r
{\r
LRESULT r = 0;\r
START_ROUTINE\r
- // WNDPROCがShift_JIS用であるため\r
if(IsWindowUnicode(hWnd))\r
r = CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam);\r
else\r
wLVFindInfo.lParam = pmLVFindInfo->lParam;\r
wLVFindInfo.pt = pmLVFindInfo->pt;\r
wLVFindInfo.vkDirection = pmLVFindInfo->vkDirection;\r
- r = SendMessageW(hWnd, LVM_FINDITEMW, wParam, (LPARAM)&wLVItem);\r
+ r = SendMessageW(hWnd, LVM_FINDITEMW, wParam, (LPARAM)&wLVFindInfo);\r
break;\r
case LVM_GETCOLUMNA:\r
pmLVColumn = (LVCOLUMNA*)lParam;\r
return r;\r
}\r
\r
+DWORD_PTR SHGetFileInfoM(LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA *psfi, UINT cbFileInfo, UINT uFlags)\r
+{\r
+ DWORD_PTR r = 0;\r
+ wchar_t* pw0 = NULL;\r
+ SHFILEINFOW wsfi;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoWMultiString(pszPath);\r
+ if((r = SHGetFileInfoW(pw0, dwFileAttributes, &wsfi, cbFileInfo, uFlags)) != 0)\r
+ {\r
+ psfi->hIcon = wsfi.hIcon;\r
+ psfi->iIcon = wsfi.iIcon;\r
+ psfi->dwAttributes = wsfi.dwAttributes;\r
+ WtoM(psfi->szDisplayName, MAX_PATH, wsfi.szDisplayName, -1);\r
+ WtoM(psfi->szTypeName, 80, wsfi.szTypeName, -1);\r
+ }\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
BOOL AppendMenuM(HMENU hMenu, UINT uFlags, UINT_PTR uIDNewItem, LPCSTR lpNewItem)\r
{\r
int r = 0;\r
{\r
BOOL r = FALSE;\r
wchar_t* pw0 = NULL;\r
+ wchar_t* pw1 = NULL;\r
CHOOSEFONTW a0;\r
LOGFONTW* pwlf;\r
START_ROUTINE\r
a0.rgbColors = v0->rgbColors;\r
a0.lCustData = v0->lCustData;\r
a0.lpfnHook = v0->lpfnHook;\r
- a0.lpTemplateName = DuplicateMtoW(v0->lpTemplateName, -1);\r
+ pw0 = DuplicateMtoW(v0->lpTemplateName, -1);\r
+ a0.lpTemplateName = pw0;\r
a0.hInstance = v0->hInstance;\r
- a0.lpszStyle = DuplicateMtoWBuffer(v0->lpszStyle, -1, LF_FACESIZE * 4);\r
+ pw1 = DuplicateMtoWBuffer(v0->lpszStyle, -1, LF_FACESIZE * 4);\r
+ a0.lpszStyle = pw1;\r
a0.nFontType = v0->nFontType;\r
a0.nSizeMin = v0->nSizeMin;\r
a0.nSizeMax = v0->nSizeMax;\r
TerminateStringM(v0->lpLogFont->lfFaceName, LF_FACESIZE);\r
}\r
v0->rgbColors = a0.rgbColors;\r
- WtoM(v0->lpszStyle, LF_FACESIZE, a0.lpszStyle, -1);\r
+ WtoM(v0->lpszStyle, LF_FACESIZE, pw1, -1);\r
TerminateStringM(v0->lpszStyle, LF_FACESIZE);\r
v0->nFontType = a0.nFontType;\r
if(pwlf)\r
free(pwlf);\r
- FreeDuplicatedString((void*)a0.lpTemplateName);\r
- FreeDuplicatedString(a0.lpszStyle);\r
END_ROUTINE\r
FreeDuplicatedString(pw0);\r
+ FreeDuplicatedString(pw1);\r
return r;\r
}\r
\r
return r;\r
}\r
\r
+BOOL MoveFileM(LPCSTR lpExistingFileName, LPCSTR lpNewFileName)\r
+{\r
+ BOOL r = FALSE;\r
+ wchar_t* pw0 = NULL;\r
+ wchar_t* pw1 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpExistingFileName, -1);\r
+ pw1 = DuplicateMtoW(lpNewFileName, -1);\r
+ r = MoveFileW(pw0, pw1);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ FreeDuplicatedString(pw1);\r
+ return r;\r
+}\r
+\r
+BOOL DeleteFileM(LPCSTR lpFileName)\r
+{\r
+ BOOL r = FALSE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpFileName, -1);\r
+ r = DeleteFileW(pw0);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
+BOOL CreateDirectoryM(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)\r
+{\r
+ BOOL r = FALSE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = CreateDirectoryW(pw0, lpSecurityAttributes);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
+BOOL RemoveDirectoryM(LPCSTR lpPathName)\r
+{\r
+ BOOL r = FALSE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = RemoveDirectoryW(pw0);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
int mkdirM(const char * _Path)\r
{\r
- int r = 0;\r
+ int r = -1;\r
wchar_t* pw0 = NULL;\r
START_ROUTINE\r
pw0 = DuplicateMtoW(_Path, -1);\r
\r
int _mkdirM(const char * _Path)\r
{\r
- int r = 0;\r
+ int r = -1;\r
wchar_t* pw0 = NULL;\r
START_ROUTINE\r
pw0 = DuplicateMtoW(_Path, -1);\r
\r
int rmdirM(const char * _Path)\r
{\r
- int r = 0;\r
+ int r = -1;\r
wchar_t* pw0 = NULL;\r
START_ROUTINE\r
pw0 = DuplicateMtoW(_Path, -1);\r
\r
int _rmdirM(const char * _Path)\r
{\r
- int r = 0;\r
+ int r = -1;\r
wchar_t* pw0 = NULL;\r
START_ROUTINE\r
pw0 = DuplicateMtoW(_Path, -1);\r
return r;\r
}\r
\r
+int removeM(const char * _Filename)\r
+{\r
+ int r = -1;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(_Filename, -1);\r
+ r = _wremove(pw0);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
+int _removeM(const char * _Filename)\r
+{\r
+ int r = -1;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(_Filename, -1);\r
+ r = _wremove(pw0);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
+int _unlinkM(const char * _Filename)\r
+{\r
+ int r = -1;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(_Filename, -1);\r
+ r = _wunlink(pw0);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
size_t _mbslenM(const unsigned char * _Str)\r
{\r
size_t r = 0;\r
START_ROUTINE\r
- while(GetNextCharM(_Str, &_Str) > 0)\r
+ while(GetNextCharM(_Str, NULL, &_Str) > 0)\r
{\r
r++;\r
}\r
unsigned int c;\r
unsigned char* p;\r
START_ROUTINE\r
- while((c = GetNextCharM(_Str, &p)) > 0)\r
+ while((c = GetNextCharM(_Str, NULL, &p)) > 0)\r
{\r
if(c == _Ch)\r
break;\r
unsigned int c;\r
unsigned char* p;\r
START_ROUTINE\r
- while((c = GetNextCharM(_Str, &p)) > 0)\r
+ while((c = GetNextCharM(_Str, NULL, &p)) > 0)\r
{\r
if(c == _Ch)\r
r = (unsigned char*)_Str;\r
c2 = 0;\r
while(_MaxCount > 0)\r
{\r
- c1 = GetNextCharM(_Str1, &_Str1);\r
- c2 = GetNextCharM(_Str2, &_Str2);\r
+ c1 = GetNextCharM(_Str1, NULL, &_Str1);\r
+ c2 = GetNextCharM(_Str2, NULL, &_Str2);\r
if(c1 != c2)\r
break;\r
_MaxCount--;\r
{\r
unsigned char* r = NULL;\r
START_ROUTINE\r
- while(_Count > 0 && GetNextCharM(_Str, &_Str) > 0)\r
+ while(_Count > 0 && GetNextCharM(_Str, NULL, &_Str) > 0)\r
{\r
_Count--;\r
}\r