void CStartupInfo::InitDialogItems(const CInitDialogItem *srcItems, FarDialogItem *destItems, int numItems) { for (int i = 0; i < numItems; i++) { const CInitDialogItem &srcItem = srcItems[i]; FarDialogItem &destItem = destItems[i]; destItem.Type = srcItem.Type; destItem.X1 = srcItem.X1; destItem.Y1 = srcItem.Y1; destItem.X2 = srcItem.X2; destItem.Y2 = srcItem.Y2; destItem.Focus = GetBOOLValue(srcItem.Focus); if(srcItem.HistoryName != NULL) destItem.History = srcItem.HistoryName; else destItem.Selected = GetBOOLValue(srcItem.Selected); destItem.Flags = srcItem.Flags; destItem.DefaultButton = GetBOOLValue(srcItem.DefaultButton); if(srcItem.DataMessageId < 0) MyStringCopy(destItem.Data, srcItem.DataString); else MyStringCopy(destItem.Data, GetMsgString(srcItem.DataMessageId)); /* if ((unsigned int)Init[i].Data < 0xFFF) MyStringCopy(destItem.Data, GetMsg((unsigned int)srcItem.Data)); else MyStringCopy(destItem.Data,srcItem.Data); */ } }
static bool CopyString(char *dest, const AString &src, int maxSize) { if (src.Length() >= maxSize) return false; MyStringCopy(dest, (const char *)src); return true; }
void CPercentPrinter::RePrintRatio() { char s[32]; ConvertUInt64ToString(((m_Total == 0) ? 0 : (m_CurValue * 100 / m_Total)), s); int size = (int)strlen(s); s[size++] = '%'; s[size] = '\0'; int extraSize = kPaddingSize + MyMax(size, kPercentsSize); if (extraSize < m_NumExtraChars) extraSize = m_NumExtraChars; char fullString[kMaxExtraSize * 3]; char *p = fullString; int i; if (m_NumExtraChars == 0) { for (i = 0; i < extraSize; i++) *p++ = ' '; m_NumExtraChars = extraSize; } for (i = 0; i < m_NumExtraChars; i++) *p++ = '\b'; m_NumExtraChars = extraSize; for (; size < m_NumExtraChars; size++) *p++ = ' '; MyStringCopy(p, s); (*OutStream) << fullString; OutStream->Flush(); m_PrevValue = m_CurValue; }
bool CDoubleZeroStringListW::Add(LPCWSTR s) throw() { unsigned len = MyStringLen(s) + 1; if (len >= Size) return false; MyStringCopy(Buf, s); Buf += len; Size -= len; return true; }
wchar_t * MyStringLower(wchar_t *s) { if (s == 0) return 0; wchar_t *res = CharLowerW(s); if (res != 0 || ::GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) return res; AString a = UnicodeStringToMultiByte(s); a.MakeLower(); return MyStringCopy(s, (const wchar_t *)MultiByteToUnicodeString(a)); }
static bool MakeOctalString8(char *s, UInt32 value) { AString tempString = MakeOctalString(value); const int kMaxSize = 8; if (tempString.Length() >= kMaxSize) return false; int numSpaces = kMaxSize - (tempString.Length() + 1); for(int i = 0; i < numSpaces; i++) s[i] = ' '; MyStringCopy(s + numSpaces, (const char *)tempString); return true; }
static HRESULT ParseDirItem(const Byte *base, size_t pos, size_t size, const UString &prefix, CObjectVector<CItem> &items) { for (;;) { if (pos + 8 > size) return S_FALSE; const Byte *p = base + pos; UInt64 length = Get64(p); if (length == 0) return S_OK; if (pos + 102 > size || pos + length + 8 > size || length > ((UInt64)1 << 62)) return S_FALSE; CItem item; item.Attrib = Get32(p + 8); // item.SecurityId = Get32(p + 0xC); UInt64 subdirOffset = Get64(p + 0x10); GetFileTimeFromMem(p + 0x28, &item.CTime); GetFileTimeFromMem(p + 0x30, &item.ATime); GetFileTimeFromMem(p + 0x38, &item.MTime); memcpy(item.Hash, p + 0x40, kHashSize); // UInt16 shortNameLen = Get16(p + 98); UInt16 fileNameLen = Get16(p + 100); size_t tempPos = pos + 102; if (tempPos + fileNameLen > size) return S_FALSE; wchar_t *sz = item.Name.GetBuffer(prefix.Length() + fileNameLen / 2 + 1); MyStringCopy(sz, (const wchar_t *)prefix); sz += prefix.Length(); for (UInt16 i = 0; i + 2 <= fileNameLen; i += 2) *sz++ = Get16(base + tempPos + i); *sz++ = '\0'; item.Name.ReleaseBuffer(); if (fileNameLen == 0 && item.isDir() && !item.HasStream()) { item.Attrib = 0x10; // some swm archives have system/hidden attributes for root item.Name.Delete(item.Name.Length() - 1); } items.Add(item); pos += (size_t)length; if (item.isDir() && (subdirOffset != 0)) { if (subdirOffset >= size) return S_FALSE; RINOK(ParseDirItem(base, (size_t)subdirOffset, size, item.Name + WCHAR_PATH_SEPARATOR, items)); } } }
LONG CKey::SetValue_Strings(LPCTSTR valueName, const UStringVector &strings) throw() { UInt32 numChars = 0; unsigned i; for (i = 0; i < strings.Size(); i++) numChars += strings[i].Len() + 1; CBuffer<wchar_t> buffer(numChars); unsigned pos = 0; for (i = 0; i < strings.Size(); i++) { const UString &s = strings[i]; MyStringCopy((wchar_t *)buffer + pos, (const wchar_t *)s); pos += s.Len() + 1; } return SetValue(valueName, buffer, numChars * sizeof(wchar_t)); }
int CStartupInfo::Menu( unsigned int flags, const char *title, const char *helpTopic, const CSysStringVector &items, int selectedItem) { CRecordVector<FarMenuItem> farMenuItems; for(int i = 0; i < items.Size(); i++) { FarMenuItem item; item.Checked = 0; item.Separator = 0; item.Selected = (i == selectedItem); CSysString reducedString = items[i].Left(sizeof(item.Text) / sizeof(item.Text[0]) - 1); MyStringCopy(item.Text, (const char *)GetOemString(reducedString)); farMenuItems.Add(item); } return Menu(flags, title, helpTopic, &farMenuItems.Front(), farMenuItems.Size()); }
bool MyGetOpenFileName(HWND hwnd, LPCWSTR title, LPCWSTR initialDir, LPCWSTR filePath, LPCWSTR filterDescription, LPCWSTR filter, UString &resPath #ifdef UNDER_CE , bool openFolder #endif ) { const unsigned kBufSize = MAX_PATH * 2; const unsigned kFilterBufSize = MAX_PATH; if (!filter) filter = L"*.*"; #ifndef _UNICODE if (!g_IsNT) { CHAR buf[kBufSize]; MyStringCopy(buf, (const char *)GetSystemString(filePath)); // OPENFILENAME_NT4A OPENFILENAMEA p; memset(&p, 0, sizeof(p)); p.lStructSize = my_compatib_OPENFILENAMEA_size; p.hwndOwner = hwnd; CHAR filterBuf[kFilterBufSize]; { CDoubleZeroStringListA dz(filterBuf, kFilterBufSize); dz.Add(GetSystemString(filterDescription ? filterDescription : filter)); dz.Add(GetSystemString(filter)); dz.Finish(); p.lpstrFilter = filterBuf; p.nFilterIndex = 1; } p.lpstrFile = buf; p.nMaxFile = kBufSize; CONV_U_To_A(p.lpstrInitialDir, initialDir, initialDirA); CONV_U_To_A(p.lpstrTitle, title, titleA); p.Flags = OFN_EXPLORER | OFN_HIDEREADONLY; bool res = BOOLToBool(::GetOpenFileNameA(&p)); resPath = GetUnicodeString(buf); return res; } else #endif { WCHAR buf[kBufSize]; MyStringCopy(buf, filePath); // OPENFILENAME_NT4W OPENFILENAMEW p; memset(&p, 0, sizeof(p)); p.lStructSize = my_compatib_OPENFILENAMEW_size; p.hwndOwner = hwnd; WCHAR filterBuf[kFilterBufSize]; { CDoubleZeroStringListW dz(filterBuf, kFilterBufSize); dz.Add(filterDescription ? filterDescription : filter); dz.Add(filter); dz.Finish(); p.lpstrFilter = filterBuf; p.nFilterIndex = 1; } p.lpstrFile = buf; p.nMaxFile = kBufSize; p.lpstrInitialDir = initialDir; p.lpstrTitle = title; p.Flags = OFN_EXPLORER | OFN_HIDEREADONLY #ifdef UNDER_CE | (openFolder ? (MY__OFN_PROJECT | MY__OFN_SHOW_ALL) : 0) #endif ; bool res = BOOLToBool(::GetOpenFileNameW(&p)); resPath = buf; return res; } }
bool MyGetOpenFileName(HWND hwnd, LPCWSTR title, LPCWSTR fullFileName, LPCWSTR s, UString &resPath) { const int kBufferSize = MAX_PATH * 2; #ifndef _UNICODE if (!g_IsNT) { CHAR buffer[kBufferSize]; MyStringCopy(buffer, (const char *)GetSystemString(fullFileName)); OPENFILENAME info; info.lStructSize = sizeof(info); info.hwndOwner = hwnd; info.hInstance = 0; const int kFilterBufferSize = MAX_PATH; CHAR filterBuffer[kFilterBufferSize]; CDoubleZeroStringListA doubleZeroStringList; doubleZeroStringList.Add(GetSystemString(s)); doubleZeroStringList.Add("*.*"); doubleZeroStringList.SetForBuffer(filterBuffer); info.lpstrFilter = filterBuffer; info.lpstrCustomFilter = NULL; info.nMaxCustFilter = 0; info.nFilterIndex = 0; info.lpstrFile = buffer; info.nMaxFile = kBufferSize; info.lpstrFileTitle = NULL; info.nMaxFileTitle = 0; info.lpstrInitialDir= NULL; info.lpstrTitle = 0; AString titleA; if (title != 0) { titleA = GetSystemString(title); info.lpstrTitle = titleA; } info.Flags = OFN_EXPLORER | OFN_HIDEREADONLY; info.nFileOffset = 0; info.nFileExtension = 0; info.lpstrDefExt = NULL; info.lCustData = 0; info.lpfnHook = NULL; info.lpTemplateName = NULL; bool res = BOOLToBool(::GetOpenFileNameA(&info)); resPath = GetUnicodeString(buffer); return res; } else #endif { WCHAR buffer[kBufferSize]; MyStringCopy(buffer, fullFileName); OPENFILENAMEW info; info.lStructSize = sizeof(info); info.hwndOwner = hwnd; info.hInstance = 0; const int kFilterBufferSize = MAX_PATH; WCHAR filterBuffer[kFilterBufferSize]; CDoubleZeroStringListW doubleZeroStringList; doubleZeroStringList.Add(s); doubleZeroStringList.Add(L"*.*"); doubleZeroStringList.SetForBuffer(filterBuffer); info.lpstrFilter = filterBuffer; info.lpstrCustomFilter = NULL; info.nMaxCustFilter = 0; info.nFilterIndex = 0; info.lpstrFile = buffer; info.nMaxFile = kBufferSize; info.lpstrFileTitle = NULL; info.nMaxFileTitle = 0; info.lpstrInitialDir= NULL; info.lpstrTitle = title; info.Flags = OFN_EXPLORER | OFN_HIDEREADONLY; info.nFileOffset = 0; info.nFileExtension = 0; info.lpstrDefExt = NULL; info.lCustData = 0; info.lpfnHook = NULL; info.lpTemplateName = NULL; bool res = BOOLToBool(::GetOpenFileNameW(&info)); resPath = buffer; return res; } }
void CDoubleZeroStringListW::SetForBuffer(LPWSTR buffer) { MyStringCopy(buffer, (const wchar_t *)m_String); for (int i = 0; i < m_Indexes.Size(); i++) buffer[m_Indexes[i]] = L'\0'; }