BOOL GetOpenFileNameU8Core(LPOPENFILENAME ofn, BOOL (WINAPI *ofn_func)(OPENFILENAMEW*)) { OPENFILENAMEW ofn_w; Wstr filter_w(MAX_PATH), cfilter_w(ofn->nMaxCustFilter), file_w(ofn->nMaxFile), ftitle_w(ofn->nMaxFileTitle), idir_w(MAX_PATH), title_w(MAX_PATH), defext_w(MAX_PATH), template_w(MAX_PATH); memcpy(&ofn_w, ofn, sizeof(OPENFILENAME)); WCHAR *wp=filter_w.Buf(); for (const char *p=ofn->lpstrFilter; p && *p; p+=strlen(p)+1) { wp += U8toW(p, wp, (int)(MAX_PATH - (wp - filter_w.Buf()))) + 1; } *wp = 0; U8toW(ofn->lpstrCustomFilter, cfilter_w.Buf(), ofn->nMaxCustFilter); U8toW(ofn->lpstrFile, file_w.Buf(), ofn->nMaxFile); U8toW(ofn->lpstrFileTitle, ftitle_w.Buf(), ofn->nMaxFileTitle); U8toW(ofn->lpstrInitialDir, idir_w.Buf(), MAX_PATH); U8toW(ofn->lpstrTitle, title_w.Buf(), MAX_PATH); U8toW(ofn->lpstrDefExt, defext_w.Buf(), MAX_PATH); U8toW(ofn->lpTemplateName, template_w.Buf(), MAX_PATH); if (ofn->lpstrFilter) ofn_w.lpstrFilter = filter_w.s(); if (ofn->lpstrCustomFilter) ofn_w.lpstrCustomFilter = cfilter_w.Buf(); if (ofn->lpstrFile) ofn_w.lpstrFile = file_w.Buf(); if (ofn->lpstrFileTitle) ofn_w.lpstrFileTitle = ftitle_w.Buf(); if (ofn->lpstrInitialDir) ofn_w.lpstrInitialDir = idir_w.s(); if (ofn->lpstrTitle) ofn_w.lpstrTitle = title_w.s(); if (ofn->lpstrDefExt) ofn_w.lpstrDefExt = defext_w.s(); if (ofn->lpTemplateName) ofn_w.lpTemplateName = template_w.s(); BOOL ret = ofn_func(&ofn_w); if (ofn->lpstrCustomFilter) { WtoU8(cfilter_w.s(), ofn->lpstrCustomFilter, ofn->nMaxCustFilter); } if (ofn->lpstrFileTitle) { WtoU8(ftitle_w.s(), ofn->lpstrFileTitle, ofn->nMaxFileTitle); } if (ofn->lpstrFile) { if (ofn_w.Flags & OFN_ALLOWMULTISELECT) { const WCHAR *wp=file_w.s(); char *p; for (p=ofn->lpstrFile; wp && *wp; wp+=wcslen(wp)+1) { p += WtoU8(wp, p, (int)(ofn->nMaxFile - (p - ofn->lpstrFile))) + 1; } *p = 0; } else { WtoU8(file_w.s(), ofn->lpstrFile, ofn->nMaxFile); } } // if (ofn_w.lpstrFile[ofn_w.nFileOffset]) ofn->nFileOffset = ::WideCharToMultiByte(CP_UTF8, 0, ofn_w.lpstrFile, ofn_w.nFileOffset, 0, 0, 0, 0); return ret; }
static WRITE8_DEVICE_HANDLER( gyruss_filter1_w ) { filter_w(device, 1, data); }
void gyruss_filter1_w(int offset,int data) { filter_w(1,data); }
void gyruss_filter0_w(int offset,int data) { filter_w(0,data); }