double wtof_test(const WString& string, bool& success) { wchar_t* endptr = 0; double result = wcstod(string.Buffer(), &endptr); success = endptr == string.Buffer() + string.Length(); return result; }
vint wtoi_test(const WString& string, bool& success) { wchar_t* endptr = 0; vint result = wcstol(string.Buffer(), &endptr, 10); success = endptr == string.Buffer() + string.Length() && itow(result) == string; return result; }
vuint64_t wtou64_test(const WString& string, bool& success) { wchar_t* endptr = 0; vuint64_t result = _wcstoui64(string.Buffer(), &endptr, 10); success = endptr == string.Buffer() + string.Length() && u64tow(result) == string; return result; }
AString wtoa(const WString& string) { vint len = _wtoa(string.Buffer(), 0, 0); char* buffer = new char[len]; memset(buffer, 0, len*sizeof(*buffer)); _wtoa(string.Buffer(), buffer, (int)len); AString s = buffer; delete[] buffer; return s; }
FileStream::FileStream(const WString& fileName, AccessRight _accessRight) :accessRight(_accessRight) { const wchar_t* mode=L"rb"; switch(accessRight) { case ReadOnly: mode=L"rb"; break; case WriteOnly: mode=L"wb"; break; case ReadWrite: mode=L"w+b"; break; } #if defined VCZH_MSVC if(_wfopen_s(&file, fileName.Buffer(), mode)!=0) { file=0; } #elif defined VCZH_GCC AString fileNameA = wtoa(fileName); AString modeA = wtoa(mode); file = fopen(fileNameA.Buffer(), modeA.Buffer()); #endif }
bool Folder::GetFiles(std::list<Face::File>& files)const { if (!Exists()) return false; WIN32_FIND_DATA findData; HANDLE findHandle = INVALID_HANDLE_VALUE; while (true) { if (findHandle == INVALID_HANDLE_VALUE) { WString searchPath = (filePath_ / L"*").GetFullPath(); findHandle = FindFirstFile(searchPath.Buffer(), &findData); if (findHandle == INVALID_HANDLE_VALUE) { break; } } else { BOOL result = FindNextFile(findHandle, &findData); if (result == 0) { FindClose(findHandle); break; } } if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { files.push_back(File(filePath_ / findData.cFileName)); } } return true; }
Ptr<workflow::WfClassDeclaration> Workflow_InstallClass(const WString& className, Ptr<workflow::WfModule> module) { auto decls = &module->declarations; auto reading = className.Buffer(); while (true) { auto delimiter = wcsstr(reading, L"::"); if (delimiter) { auto ns = MakePtr<WfNamespaceDeclaration>(); ns->name.value = WString(reading, delimiter - reading); decls->Add(ns); decls = &ns->declarations; } else { auto ctorClass = MakePtr<WfClassDeclaration>(); ctorClass->kind = WfClassKind::Class; ctorClass->constructorType = WfConstructorType::Undefined; ctorClass->name.value = reading; decls->Add(ctorClass); return ctorClass; } reading = delimiter + 2; } }
bool IsFileDirectory(const WString& fullPath) { // Get file attributes. WIN32_FILE_ATTRIBUTE_DATA info; BOOL result=GetFileAttributesEx(fullPath.Buffer(), GetFileExInfoStandard, &info); return (info.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0; }
WString SplitSchemaName(WString typeName, List<WString>& namespaces) { auto reading = typeName.Buffer(); while (auto split = wcsstr(reading, L"::")) { namespaces.Add(WString(reading, split - reading)); reading = split + 2; } return reading; }
void HexToBinary(stream::IStream& stream, const WString& hexText) { const wchar_t* buffer = hexText.Buffer(); vint count = hexText.Length() / 2; for (vint i = 0; i < count; i++) { vuint8_t byte = (vuint8_t)(HexToInt(buffer[0]) * 16 + HexToInt(buffer[1])); buffer += 2; stream.Write(&byte, 1); } }
FILETIME GetFileLastWriteTime(const WString& fullPath) { // Get file attributes. WIN32_FILE_ATTRIBUTE_DATA info; BOOL result=GetFileAttributesEx(fullPath.Buffer(), GetFileExInfoStandard, &info); // Get the localized string for the file last write date. FILETIME localFileTime; FileTimeToLocalFileTime(&info.ftLastWriteTime, &localFileTime); return localFileTime; }
LARGE_INTEGER GetFileSize(const WString& fullPath) { // Get file attributes. WIN32_FILE_ATTRIBUTE_DATA info; BOOL result=GetFileAttributesEx(fullPath.Buffer(), GetFileExInfoStandard, &info); // Get the string for file size LARGE_INTEGER li; li.HighPart=info.nFileSizeHigh; li.LowPart=info.nFileSizeLow; return li; }
Ptr<GuiImageData> GetFileIcon(const WString& fullPath, UINT uFlags) { // Use SHGetFileInfo to get the correct icons for the specified directory or file. SHFILEINFO info; DWORD result=SHGetFileInfo(fullPath.Buffer(), 0, &info, sizeof(SHFILEINFO), uFlags); Ptr<GuiImageData> imageData; if(result) { Ptr<INativeImage> image=windows::CreateImageFromHICON(info.hIcon); if(image) { imageData=new GuiImageData(image, 0); } DestroyIcon(info.hIcon); } return imageData; }
Ptr<INativeImage> WindowsImageService::CreateImageFromFile(const WString& path) { IWICBitmapDecoder* bitmapDecoder=0; HRESULT hr=imagingFactory->CreateDecoderFromFilename( path.Buffer(), NULL, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &bitmapDecoder); if(SUCCEEDED(hr)) { return new WindowsImage(this, bitmapDecoder); } else { return 0; } }
bool GuiSinglelineTextBox::TextElementOperatorCallback::BeforeModify(TextPos start, TextPos end, const WString& originalText, WString& inputText) { vint length=inputText.Length(); const wchar_t* input=inputText.Buffer(); for(vint i=0;i<length;i++) { if(*input==0 || *input==L'\r' || *input==L'\n') { length=i; break; } } if(length!=inputText.Length()) { inputText=inputText.Left(length); } return true; }
bool Folder::Rename(const WString& newName)const { WString oldFileName = filePath_.GetFullPath(); WString newFileName = (filePath_.GetFolder() / newName).GetFullPath(); return MoveFile(oldFileName.Buffer(), newFileName.Buffer()) != 0; }
WString wupper(const WString& string) { WString result = string.Buffer(); _wcsupr_s((wchar_t*)result.Buffer(), result.Length() + 1); return result; }
WString GetFileTypeName(const WString& fullPath) { SHFILEINFO info; DWORD result=SHGetFileInfo(fullPath.Buffer(), 0, &info, sizeof(SHFILEINFO), SHGFI_TYPENAME); return result?info.szTypeName:L""; }
void Console::Write(const WString& string) { DWORD count = 0; WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), string.Buffer(), (int)string.Length(), &count, 0); }
WString GetFileDisplayName(const WString& fullPath) { SHFILEINFO info; DWORD result=SHGetFileInfo(fullPath.Buffer(), 0, &info, sizeof(SHFILEINFO), SHGFI_DISPLAYNAME); return result?info.szDisplayName:L""; }
void Console::SetTitle(const WString& string) { SetConsoleTitle(string.Buffer()); }
void OpenUrl(WString url)override { osx::LaunchURL(url.Buffer()); }