예제 #1
0
파일: Common.cpp 프로젝트: nightwing/npp
// Build Recent File menu entries from given
TCHAR *BuildMenuFileName(TCHAR *buffer, int len, int pos, const TCHAR *filename)
{
    buffer[0] = 0;

    TCHAR *itr = buffer;
    TCHAR *end = buffer + MAX_PATH - 1;
    if (pos < 9)
    {
        *itr++ = '&';
        *itr++ = '1' + (TCHAR)pos;
    }
    else if (pos == 9)
    {
        *itr++ = '1';
        *itr++ = '&';
        *itr++ = '0';
    }
    else
    {
        wsprintf(itr, TEXT("%d"), pos+1);
        itr = itr + lstrlen(itr);
    }
    *itr++ = ':';
    *itr++ = ' ';

    if (len > 0)
    {
        TCHAR cnvName[MAX_PATH*2];
        convertFileName(cnvName, filename);
        ::PathCompactPathEx(itr, filename, len - (itr-buffer), 0);
    }
    else
    {
        TCHAR cnvName[MAX_PATH];
        const TCHAR *s1;

        if (len == 0)
            s1 = PathFindFileName(filename);
        else // (len < 0)
            s1 = filename;

        int len = lstrlen(s1);
        if (len < (end-itr))
        {
            lstrcpy(cnvName, s1);
        }
        else
        {
            int n = (len-3-(itr-buffer))/2;
            generic_strncpy(cnvName, s1, n);
            lstrcpy(cnvName+n, TEXT("..."));
            lstrcat(cnvName, s1 + lstrlen(s1) - n);
        }
        convertFileName(itr, cnvName);
    }
    return buffer;
}
예제 #2
0
TCHAR *BuildMenuFileName(TCHAR *buffer, int len, int pos, const TCHAR *filename)
{
	TCHAR cwd[MAX_PATH];
	buffer[0] = 0;
	GetCurrentDirectory(_countof(cwd), cwd);
	lstrcat(cwd, TEXT("\\"));

	TCHAR *itr = buffer;
	TCHAR *end = buffer + len - 1;
	if (pos < 9)
	{
		*itr++ = '&';
		*itr++ = '1' + (TCHAR)pos;
	}
	else if (pos == 9)
	{
		*itr++ = '1';
		*itr++ = '&';
		*itr++ = '0';
	}
	else
	{
		wsprintf(itr, TEXT("%d"), pos+1);
		itr = itr + lstrlen(itr);
	}
	*itr++ = ':';
	*itr++ = ' ';
	if (0 == generic_strnicmp(filename, cwd, lstrlen(cwd)))
	{
		TCHAR cnvName[MAX_PATH];
		const TCHAR *s1 = PathFindFileName(filename);
		int len = lstrlen(s1);
		if (len < (end-itr))
		{
			lstrcpy(cnvName, s1);
		}
		else
		{
			int n = (len-3-(itr-buffer))/2;
			generic_strncpy(cnvName, s1, n);
			lstrcpy(cnvName+n, TEXT("..."));
			lstrcat(cnvName, s1 + lstrlen(s1) - n);
		}
		convertFileName(itr, cnvName);
	}
	else
	{
		TCHAR cnvName[MAX_PATH*2];
		convertFileName(cnvName, filename);
		PathCompactPathEx(itr, filename, len - (itr-buffer), 0);
	}
	return buffer;
}
예제 #3
0
// Build Recent File menu entries from given
generic_string BuildMenuFileName(int filenameLen, unsigned int pos, const generic_string &filename)
{
	generic_string strTemp;

	if (pos < 9)
	{
		strTemp.push_back('&');
		strTemp.push_back('1' + (TCHAR)pos);
	}
	else if (pos == 9)
	{
		strTemp.append(TEXT("1&0"));
	}
	else
	{
		strTemp.append(uintToString(pos + 1));
	}
	strTemp.append(TEXT(": "));

	if (filenameLen > 0)
	{
		std::vector<TCHAR> vt(filenameLen + 1);
		//--FLS: W removed from PathCompactPathExW due to compiler errors for ANSI version.
		PathCompactPathEx(&vt[0], filename.c_str(), filenameLen + 1, 0);
		strTemp.append(convertFileName(vt.begin(), vt.begin() + lstrlen(&vt[0])));
	}
	else
	{
		// (filenameLen < 0)
		generic_string::const_iterator it = filename.begin();

		if (filenameLen == 0)
			it += PathFindFileName(filename.c_str()) - filename.c_str();

		// MAX_PATH is still here to keep old trimming behaviour.
		if (filename.end() - it < MAX_PATH)
		{
			strTemp.append(convertFileName(it, filename.end()));
		}
		else
		{
			strTemp.append(convertFileName(it, it + MAX_PATH / 2 - 3));
			strTemp.append(TEXT("..."));
			strTemp.append(convertFileName(filename.end() - MAX_PATH / 2, filename.end()));
		}
	}

	return strTemp;
}
예제 #4
0
void BSAFile::load(const string& fileName)
{
	auto bsaPath = convertFileName(fileName);

	ifstream stream(bsaPath, ios::binary | ios::in);
	if (!stream.is_open())
	{
		cerr << "Cannot open " << bsaPath << endl;
		return;
	}

	in.setStream(std::move(stream));

	in.jump(12);

	uint32_t nbFolders, nbFiles, foldersNameLen;
	in >> m_flags >> nbFolders >> nbFiles >> foldersNameLen >> m_filesNameLen;

	m_archiveCompressed = (m_flags & BSA_ARCHIVE_COMPRESSED) != 0;

	in.jump(4);

	m_folders.resize(nbFolders);
	in >> m_folders;
}