#include "OleDragDrop.h"\r
#include "common.h"\r
\r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
#define BUF_SIZE 256\r
#define CF_CNT 2\r
#define WM_DRAGDROP (WM_APP + 100)\r
if(fWide == TRUE){\r
/* \83\8f\83C\83h\83L\83\83\83\89 */\r
for(i = 0;i < cnt;i++){\r
- MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
- flen += (wcslen(wbuf) + 1) * sizeof(wchar_t);\r
+ // UTF-8\91Î\89\9e\r
+// MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
+// flen += (wcslen(wbuf) + 1) * sizeof(wchar_t);\r
+ flen += sizeof(wchar_t) * MtoW(NULL, 0, FileName[i], -1);\r
}\r
flen++;\r
}else{\r
/* \83}\83\8b\83`\83o\83C\83g */\r
for(i = 0;i < cnt;i++){\r
- flen += lstrlen(FileName[i]) + 1;\r
+ // UTF-8\91Î\89\9e\r
+// flen += lstrlen(FileName[i]) + 1;\r
+ MtoW(wbuf, BUF_SIZE, FileName[i], -1);\r
+ flen += sizeof(char) * WtoA(NULL, 0, wbuf, -1);\r
}\r
}\r
\r
\r
buf = (wchar_t *)(&lpDropFile[1]);\r
for(i = 0;i < cnt;i++){\r
- MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
- wcscpy(buf,wbuf);\r
- buf += wcslen(wbuf) + 1;\r
+ // UTF-8\91Î\89\9e\r
+// MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
+// wcscpy(buf,wbuf);\r
+// buf += wcslen(wbuf) + 1;\r
+ buf += MtoW(buf, BUF_SIZE, FileName[i], -1);\r
}\r
}else{\r
/* \83}\83\8b\83`\83o\83C\83g */\r
\r
buf = (char *)(&lpDropFile[1]);\r
for(i = 0;i < cnt;i++){\r
- lstrcpy(buf,FileName[i]);\r
- buf += lstrlen(FileName[i]) + 1;\r
+ // UTF-8\91Î\89\9e\r
+// lstrcpy(buf,FileName[i]);\r
+// buf += lstrlen(FileName[i]) + 1;\r
+ MtoW(wbuf, BUF_SIZE, FileName[i], -1);\r
+ buf += WtoA(buf, BUF_SIZE, wbuf, -1);\r
}\r
}\r
\r
char LocDir[FMAX_PATH+1];\r
char *PathDir;\r
\r
+ // \95Ï\90\94\82ª\96¢\8f\89\8aú\89»\82Ì\83o\83O\8fC\90³\r
+ FileListBaseNoExpand = NULL;\r
// \83\8d\81[\83J\83\8b\91¤\82Å\91I\82Î\82ê\82Ä\82¢\82é\83t\83@\83C\83\8b\82ðFileListBase\82É\93o\98^\r
if (hWndDragStart == hWndListLocal) {\r
AskLocalCurDir(LocDir, FMAX_PATH);\r
}\r
\r
/* \83t\83@\83C\83\8b\96¼\82Ì\94z\97ñ\82ð\8dì\90¬\82·\82é */\r
+ // TODO: GlobalAlloc\82ª\95Ô\82·\82Ì\82Í\83\81\83\82\83\8a\83|\83C\83\93\83^\82Å\82Í\82È\82\83n\83\93\83h\83\8b\82¾\82ª\8eÀ\8dÛ\82Í\93¯\82¶\92l\r
FileNameList = (char **)GlobalAlloc(GPTR,sizeof(char *) * filenum);\r
if(FileNameList == NULL){\r
abort();\r
{\r
if(!IsDigit(*Pos))\r
{\r
- if((_mbsncmp(Pos, "\8c\8e", 1) == 0) ||\r
- (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC\82Ì\81u\8c\8e\81v */\r
- (memcmp(Pos, "\xD4\xC2", 2) == 0)) /* GB\83R\81[\83h\82Ì\81u\8c\8e\81v */\r
+ // UTF-8\91Î\89\9e\r
+// if((_mbsncmp(Pos, "\8c\8e", 1) == 0) ||\r
+// (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC\82Ì\81u\8c\8e\81v */\r
+// (memcmp(Pos, "\xD4\xC2", 2) == 0)) /* GB\83R\81[\83h\82Ì\81u\8c\8e\81v */\r
+ if(memcmp(Pos, "\xE6\x9C\x88", 3) == 0 || memcmp(Pos, "\x8C\x8E", 2) == 0 || memcmp(Pos, "\xB7\xEE", 2) == 0 || memcmp(Pos, "\xD4\xC2", 2) == 0)\r
{\r
Pos += 2;\r
*Month = atoi(Str);\r
{\r
if(IsDigit(*Pos) == 0)\r
{\r
- if((_mbsncmp(Pos, "\8e\9e", 1) == 0) ||\r
- (memcmp(Pos, "\xBB\xFE", 2) == 0)) /* EUC\82Ì\81u\8e\9e\81v */\r
+ // UTF-8\91Î\89\9e\r
+// if((_mbsncmp(Pos, "\8e\9e", 1) == 0) ||\r
+// (memcmp(Pos, "\xBB\xFE", 2) == 0)) /* EUC\82Ì\81u\8e\9e\81v */\r
+ if(memcmp(Pos, "\xE6\x99\x82", 3) == 0 || memcmp(Pos, "\x8E\x9E", 2) == 0 || memcmp(Pos, "\xBB\xFE", 2) == 0)\r
{\r
Pos += 2;\r
if(*Pos != NUL)\r
// \91S\82Ä\82Ì\90§\8cä\97p\82Ì\95¶\8e\9a\82ÍASCII\82Ì\94Í\88Í\82Å\82 \82é\82½\82ß\81AShift_JIS\82ÆUTF-8\8aÔ\82Ì\95Ï\8a·\82Í\95s\97v
#define UNICODE
+#define _UNICODE
#define _WIN32_WINNT 0x0600
#undef _WIN32_IE
#define _WIN32_IE 0x0400
#include <tchar.h>
+#include <direct.h>
#include <windows.h>
#include <commctrl.h>
#include <shlobj.h>
// \83}\83\8b\83`\83o\83C\83g\95¶\8e\9a\97ñ\82©\82ç\83\8f\83C\83h\95¶\8e\9a\97ñ\82Ö\95Ï\8a·
int MtoW(LPWSTR pDst, int size, LPCSTR pSrc, int count)
{
- if(pSrc < (LPCSTR)0x00010000 || !((char*)pSrc + 1))
- return 0;
+ if(pSrc < (LPCSTR)0x00010000 || pSrc == (LPCSTR)~0)
+ return pSrc;
if(pDst)
return MultiByteToWideChar(CP_UTF8, 0, pSrc, count, pDst, size);
return MultiByteToWideChar(CP_UTF8, 0, pSrc, count, NULL, 0);
// \83\8f\83C\83h\95¶\8e\9a\97ñ\82©\82ç\83}\83\8b\83`\83o\83C\83g\95¶\8e\9a\97ñ\82Ö\95Ï\8a·
int WtoM(LPSTR pDst, int size, LPCWSTR pSrc, int count)
{
- if(pSrc < (LPCWSTR)0x00010000 || !((char*)pSrc + 1))
- return 0;
+ if(pSrc < (LPCWSTR)0x00010000 || pSrc == (LPCWSTR)~0)
+ return pSrc;
if(pDst)
return WideCharToMultiByte(CP_UTF8, 0, pSrc, count, pDst, size, NULL, NULL);
return WideCharToMultiByte(CP_UTF8, 0, pSrc, count, NULL, 0, NULL, NULL);
// \83\8f\83C\83h\95¶\8e\9a\97ñ\82©\82çShift_JIS\95¶\8e\9a\97ñ\82Ö\95Ï\8a·
int WtoA(LPSTR pDst, int size, LPCWSTR pSrc, int count)
{
- if(pSrc < (LPCWSTR)0x00010000 || !((char*)pSrc + 1))
- return 0;
+ if(pSrc < (LPCWSTR)0x00010000 || pSrc == (LPCWSTR)~0)
+ return pSrc;
if(pDst)
return WideCharToMultiByte(CP_ACP, 0, pSrc, count, pDst, size, NULL, NULL);
return WideCharToMultiByte(CP_ACP, 0, pSrc, count, NULL, 0, NULL, NULL);
int TerminateStringM(LPSTR lpString, int size)
{
int i;
- if(lpString < (LPSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPSTR)0x00010000 || lpString == (LPSTR)~0)
return 0;
for(i = 0; i < size; i++)
{
int TerminateStringW(LPWSTR lpString, int size)
{
int i;
- if(lpString < (LPWSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPWSTR)0x00010000 || lpString == (LPWSTR)~0)
return 0;
for(i = 0; i < size; i++)
{
size_t GetMultiStringLengthM(LPCSTR lpString)
{
size_t i;
- if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0)
return 0;
i = 0;
while(lpString[i] != '\0' || lpString[i + 1] != '\0')
size_t GetMultiStringLengthW(LPCWSTR lpString)
{
size_t i;
- if(lpString < (LPCWSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCWSTR)0x00010000 || lpString == (LPCWSTR)~0)
return 0;
i = 0;
while(lpString[i] != L'\0' || lpString[i + 1] != L'\0')
char* AllocateStringM(int size)
{
char* p;
- p = (char*)malloc(sizeof(char) * size);
+ // 0\82ª\8ew\92è\82³\82ê\82é\8fê\8d\87\82ª\82 \82é\82½\82ß1\95¶\8e\9a\95ª\92Ç\89Á
+ p = (char*)malloc(sizeof(char) * (size + 1));
+ // \94O\82Ì\82½\82ß\90æ\93ª\82ÉNULL\95¶\8e\9a\82ð\91ã\93ü
if(p)
*p = '\0';
return p;
wchar_t* AllocateStringW(int size)
{
wchar_t* p;
- p = (wchar_t*)malloc(sizeof(wchar_t) * size);
+ // 0\82ª\8ew\92è\82³\82ê\82é\8fê\8d\87\82ª\82 \82é\82½\82ß1\95¶\8e\9a\95ª\92Ç\89Á
+ p = (wchar_t*)malloc(sizeof(wchar_t) * (size + 1));
+ // \94O\82Ì\82½\82ß\90æ\93ª\82ÉNULL\95¶\8e\9a\82ð\91ã\93ü
if(p)
*p = L'\0';
return p;
char* AllocateStringA(int size)
{
char* p;
- p = (char*)malloc(sizeof(char) * size);
+ // 0\82ª\8ew\92è\82³\82ê\82é\8fê\8d\87\82ª\82 \82é\82½\82ß1\95¶\8e\9a\95ª\92Ç\89Á
+ p = (char*)malloc(sizeof(char) * (size + 1));
+ // \94O\82Ì\82½\82ß\90æ\93ª\82ÉNULL\95¶\8e\9a\82ð\91ã\93ü
if(p)
*p = '\0';
return p;
{
wchar_t* p;
int i;
- if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0)
return (wchar_t*)lpString;
if(c < 0)
c = strlen(lpString);
{
wchar_t* p;
int i;
- if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0)
return (wchar_t*)lpString;
if(c < 0)
c = strlen(lpString);
{
int count;
wchar_t* p;
- if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0)
return (wchar_t*)lpString;
count = GetMultiStringLengthM(lpString) + 1;
p = AllocateStringW(count);
{
int count;
wchar_t* p;
- if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0)
return (wchar_t*)lpString;
count = GetMultiStringLengthM(lpString) + 1;
p = AllocateStringW(size);
{
char* p;
int i;
- if(lpString < (LPCWSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCWSTR)0x00010000 || lpString == (LPCWSTR)~0)
return (char*)lpString;
if(c < 0)
c = wcslen(lpString);
{
char* p;
int i;
- if(lpString < (LPCWSTR)0x00010000 || !((char*)lpString + 1))
+ if(lpString < (LPCWSTR)0x00010000 || lpString == (LPCWSTR)~0)
return (char*)lpString;
if(c < 0)
c = wcslen(lpString);
// \95¶\8e\9a\97ñ\97p\82É\8am\95Û\82µ\82½\83\81\83\82\83\8a\82ð\8aJ\95ú
void FreeDuplicatedString(void* p)
{
- if(p < (void*)0x00010000 || !((char*)p + 1))
+ if(p < (void*)0x00010000 || p == (void*)~0)
return;
free(p);
}
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer)
{
- // TODO: \96{\97\88\82Í\95Ï\8a·\82ª\95K\97v\82¾\82ª\94¼\8ap\89p\90\94\82Ì\82Ý\82Æ\8ev\82í\82ê\82é\82Ì\82Å\8fÈ\97ª
- return GetLogicalDriveStringsA(nBufferLength, lpBuffer);
+ DWORD r = 0;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = AllocateStringW(nBufferLength * 4);
+ GetLogicalDriveStringsW(nBufferLength * 4, pw0);
+ WtoM(lpBuffer, nBufferLength, pw0, -1);
+ r = TerminateStringM(lpBuffer, nBufferLength);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+ATOM RegisterClassExM(CONST WNDCLASSEXA * v0)
+{
+ LRESULT r = 0;
+START_ROUTINE
+ // WNDPROC\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+ r = RegisterClassExA(v0);
+END_ROUTINE
+ return r;
}
HWND CreateWindowExM(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
return r;
}
+LONG GetWindowLongM(HWND hWnd, int nIndex)
+{
+ LRESULT r = 0;
+START_ROUTINE
+ // WNDPROC\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+ if(IsWindowUnicode(hWnd))
+ r = GetWindowLongW(hWnd, nIndex);
+ else
+ r = GetWindowLongA(hWnd, nIndex);
+END_ROUTINE
+ return r;
+}
+
+LONG SetWindowLongM(HWND hWnd, int nIndex, LONG dwNewLong)
+{
+ LRESULT r = 0;
+START_ROUTINE
+ // WNDPROC\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+ if(IsWindowUnicode(hWnd))
+ r = SetWindowLongW(hWnd, nIndex, dwNewLong);
+ else
+ r = SetWindowLongA(hWnd, nIndex, dwNewLong);
+END_ROUTINE
+ return r;
+}
+
+LRESULT DefWindowProcM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT r = 0;
+START_ROUTINE
+ // WNDPROC\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+ if(IsWindowUnicode(hWnd))
+ r = DefWindowProcW(hWnd, Msg, wParam, lParam);
+ else
+ r = DefWindowProcA(hWnd, Msg, wParam, lParam);
+END_ROUTINE
+ return r;
+}
+
+LRESULT CallWindowProcM(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT r = 0;
+START_ROUTINE
+ // WNDPROC\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+ if(IsWindowUnicode(hWnd))
+ r = CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
+ else
+ r = CallWindowProcA(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
+END_ROUTINE
+ return r;
+}
+
LRESULT SendMessageM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
LRESULT r = 0;
wLVFindInfo.vkDirection = pmLVFindInfo->vkDirection;
r = SendMessageW(hWnd, LVM_FINDITEMW, wParam, (LPARAM)&wLVItem);
break;
+ case LVM_GETCOLUMNA:
+ pmLVColumn = (LVCOLUMNA*)lParam;
+ wLVColumn.mask = pmLVColumn->mask;
+ wLVColumn.fmt = pmLVColumn->fmt;
+ wLVColumn.cx = pmLVColumn->cx;
+ Size = pmLVColumn->cchTextMax * 4;
+ pw0 = AllocateStringW(Size);
+ wLVColumn.pszText = pw0;
+ wLVColumn.cchTextMax = Size;
+ wLVColumn.iSubItem = pmLVColumn->iSubItem;
+ wLVColumn.iImage = pmLVColumn->iImage;
+ wLVColumn.iOrder = pmLVColumn->iOrder;
+ r = SendMessageW(hWnd, LVM_GETCOLUMNW, wParam, (LPARAM)&wLVColumn);
+ pmLVColumn->mask = wLVColumn.mask;
+ pmLVColumn->fmt = wLVColumn.fmt;
+ pmLVColumn->cx = wLVColumn.cx;
+ WtoM(pmLVColumn->pszText, pmLVColumn->cchTextMax, wLVColumn.pszText, -1);
+ TerminateStringM(pmLVColumn->pszText, pmLVColumn->cchTextMax);
+ pmLVColumn->iSubItem = wLVColumn.iSubItem;
+ pmLVColumn->iImage = wLVColumn.iImage;
+ pmLVColumn->iOrder = wLVColumn.iOrder;
+ break;
case LVM_INSERTCOLUMNA:
pmLVColumn = (LVCOLUMNA*)lParam;
wLVColumn.mask = pmLVColumn->mask;
wLVColumn.cx = pmLVColumn->cx;
pw0 = DuplicateMtoW(pmLVColumn->pszText, -1);
wLVColumn.pszText = pw0;
+ // TODO: cchTextMax\82Ì\8am\94F
wLVColumn.cchTextMax = pmLVColumn->cchTextMax;
wLVColumn.iSubItem = pmLVColumn->iSubItem;
wLVColumn.iImage = pmLVColumn->iImage;
return r;
}
+LRESULT DefDlgProcM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT r = 0;
+START_ROUTINE
+ // WNDPROC\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+ if(IsWindowUnicode(hWnd))
+ r = DefDlgProcW(hWnd, Msg, wParam, lParam);
+ else
+ r = DefDlgProcA(hWnd, Msg, wParam, lParam);
+END_ROUTINE
+ return r;
+}
+
LRESULT SendDlgItemMessageM(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam)
{
LRESULT r = 0;
UINT r = 0;
wchar_t* pw0 = NULL;
START_ROUTINE
- pw0 = AllocateStringW(cch * 4);
- DragQueryFileW(hDrop, iFile, pw0, cch * 4);
- WtoM(lpszFile, cch, pw0, -1);
- r = TerminateStringM(lpszFile, cch);
+ if(iFile == (UINT)-1)
+ r = DragQueryFileW(hDrop, iFile, lpszFile, cch);
+ else
+ {
+ pw0 = AllocateStringW(cch * 4);
+ DragQueryFileW(hDrop, iFile, pw0, cch * 4);
+ WtoM(lpszFile, cch, pw0, -1);
+ r = TerminateStringM(lpszFile, cch);
+ }
END_ROUTINE
FreeDuplicatedString(pw0);
return r;
return r;
}
+DWORD GetTempPathM(DWORD nBufferLength, LPSTR lpBuffer)
+{
+ DWORD r = 0;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = AllocateStringW(nBufferLength * 4);
+ GetTempPathW(nBufferLength * 4, pw0);
+ WtoM(lpBuffer, nBufferLength, pw0, -1);
+ r = TerminateStringM(lpBuffer, nBufferLength);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
DWORD GetFileAttributesM(LPCSTR lpFileName)
{
DWORD r = FALSE;
return r;
}
+HWND CreateDialogParamM(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam)
+{
+ HWND r = NULL;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(lpTemplateName, -1);
+ r = CreateDialogParamW(hInstance, pw0, hWndParent, lpDialogFunc, dwInitParam);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+int mkdirM(const char * _Path)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Path, -1);
+ r = _wmkdir(pw0);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+int _mkdirM(const char * _Path)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Path, -1);
+ r = _wmkdir(pw0);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+int rmdirM(const char * _Path)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Path, -1);
+ r = _wrmdir(pw0);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+int _rmdirM(const char * _Path)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Path, -1);
+ r = _wrmdir(pw0);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+size_t _mbslenM(const unsigned char * _Str)
+{
+ size_t r = 0;
+ wchar_t* pw0 = NULL;
+ wchar_t* wr;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str, -1);
+ r = wcslen(pw0);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+unsigned char * _mbschrM(const unsigned char * _Str, unsigned int _Ch)
+{
+ unsigned char* r = NULL;
+ wchar_t* pw0 = NULL;
+ wchar_t* wr;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str, -1);
+ // TODO: \94ñASCII\95¶\8e\9a\82Ì\91Î\89\9e
+ wr = wcschr(pw0, _Ch);
+ if(wr)
+ {
+ *wr = L'\0';
+ r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ }
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+unsigned char * _mbsrchrM(const unsigned char * _Str, unsigned int _Ch)
+{
+ unsigned char* r = NULL;
+ wchar_t* pw0 = NULL;
+ wchar_t* wr;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str, -1);
+ // TODO: \94ñASCII\95¶\8e\9a\82Ì\91Î\89\9e
+ wr = wcsrchr(pw0, _Ch);
+ if(wr)
+ {
+ *wr = L'\0';
+ r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ }
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+unsigned char * _mbsstrM(const unsigned char * _Str, const unsigned char * _Substr)
+{
+ unsigned char* r = NULL;
+ wchar_t* pw0 = NULL;
+ wchar_t* pw1 = NULL;
+ wchar_t* wr;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str, -1);
+ pw1 = DuplicateMtoW(_Substr, -1);
+ wr = wcsstr(pw0, pw1);
+ if(wr)
+ {
+ *wr = L'\0';
+ r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ }
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ FreeDuplicatedString(pw1);
+ return r;
+}
+
+int _mbscmpM(const unsigned char * _Str1, const unsigned char * _Str2)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+ wchar_t* pw1 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str1, -1);
+ pw1 = DuplicateMtoW(_Str2, -1);
+ r = wcscmp(pw0, pw1);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ FreeDuplicatedString(pw1);
+ return r;
+}
+
+int _mbsicmpM(const unsigned char * _Str1, const unsigned char * _Str2)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+ wchar_t* pw1 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str1, -1);
+ pw1 = DuplicateMtoW(_Str2, -1);
+ r = _wcsicmp(pw0, pw1);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ FreeDuplicatedString(pw1);
+ return r;
+}
+
+int _mbsncmpM(const unsigned char * _Str1, const unsigned char * _Str2, size_t _MaxCount)
+{
+ int r = 0;
+ wchar_t* pw0 = NULL;
+ wchar_t* pw1 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str1, -1);
+ pw1 = DuplicateMtoW(_Str2, -1);
+ r = wcsncmp(pw0, pw1, _MaxCount);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ FreeDuplicatedString(pw1);
+ return r;
+}
+
+unsigned char * _mbslwrM(unsigned char * _String)
+{
+ unsigned char* r = NULL;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_String, -1);
+ _wcslwr(pw0);
+ r = _String;
+ WtoM(_String, strlen(_String) + 1, pw0, -1);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+unsigned char * _mbsuprM(unsigned char * _String)
+{
+ unsigned char* r = NULL;
+ wchar_t* pw0 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_String, -1);
+ _wcsupr(pw0);
+ r = _String;
+ WtoM(_String, strlen(_String) + 1, pw0, -1);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+
+unsigned char * _mbsnincM(const unsigned char * _Str, size_t _Count)
+{
+ unsigned char* r = NULL;
+ wchar_t* pw0 = NULL;
+ wchar_t* wr;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Str, -1);
+ wr = _wcsninc(pw0, _Count);
+ if(wr)
+ {
+ *wr = L'\0';
+ r = _Str + WtoM(NULL, 0, pw0, -1) - 1;
+ }
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ return r;
+}
+