亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tools.cpp

?? 強大易用的郵件收發客戶端
?? CPP
字號:
#include "stdafx.h"
#include "tools.h"
#include "blowfish.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BOOL	FindLocalFile(LPCTSTR sFile, CString& s, BOOL bCreate)
{
	if (strchr(sFile, '\\')!=NULL)	// expect full or partial path, let file finder work
	{
		CFileFind finder;
		if ( finder.FindFile(sFile) )
		{
			finder.FindNextFile();
			s = finder.GetFilePath();
			return TRUE;
		}
	}
	// try at exe path
	CString sPath;
	GetModuleFileName(NULL, sPath.GetBuffer(MAX_PATH), MAX_PATH-1);
	sPath.ReleaseBuffer();
	int nPos = sPath.ReverseFind('\\');
	if (nPos<0)
		return FALSE;
	s = sPath.Left(nPos+1);
	s += sFile;
	DWORD dwA = GetFileAttributes(s);
	if ((dwA & FILE_ATTRIBUTE_DIRECTORY) == 0)
		return TRUE;
	if (dwA == (DWORD)-1 && bCreate)
	{
		CFile file;
		file.Open(s, CFile::modeCreate, NULL);
		file.Close();
		return TRUE;
	}
	return FALSE;
}

BOOL LoadTextFile(LPCTSTR sFile, CStringArray& asValues, TCHAR cRem, BOOL bCaseSens)
{
	CString sPath;
	if ( !FindLocalFile(sFile, sPath) )
		return FALSE;
	CStdioFile file;

	try
	{
		if (!file.Open(sPath, CFile::modeRead|CFile::typeText))
			return FALSE;
		asValues.SetSize(1, 10);
		int nCur = 0;
		while (file.ReadString(asValues[nCur]))
		{
			if (!asValues[nCur].IsEmpty() && asValues[nCur].GetAt(0)!=cRem)
			{
				if (!bCaseSens)
					asValues.ElementAt(nCur).MakeLower();
				nCur++;
				asValues.Add("");
			}
		}
		asValues.RemoveAt(asValues.GetSize()-1);
	}
	catch(CException* e)
	{
		e->Delete();
	}
	catch(...)
	{
	}
	file.Close();
	return TRUE;
}

BOOL IsStringMatch(LPCTSTR sV, LPCTSTR sM)
{
	CString sMask = sM;
	CString sStr = sV;

	if (sStr == sMask)
		return TRUE;
	
	LPCTSTR str=(LPCTSTR)sStr;
	LPCTSTR mask=(LPCTSTR)sMask;

	LPCTSTR pMask=mask;
	LPCTSTR pAsterisk=NULL;
	LPCTSTR pStoredPos=NULL;
	if (!str || !_tcslen(str))
		return FALSE;
	if (!mask || !_tcslen(mask) || !_tcscmp(mask, _T("*")))
		return TRUE;
	while (*pMask)
	{
		TCHAR cM=*pMask++;
		if (!*str && cM!='*')	// for case like _T("aaa") && _T("aaa*")
			return FALSE;
		switch (cM)
		{
			case '?':
				str++;
				break;
			case '*':
			{
				TCHAR c=*pMask;
				if (!c)	// last *
					return TRUE;
				TCHAR* t=_tcschr(str, c);
				if (!t)
					return FALSE;	// unable to continue
				pAsterisk=pMask-1;
				pMask++;
				pStoredPos=t+1;
				str=t+1;
				break;
			}
			default:
			{
				TCHAR cS=*str++;
				if (cS==cM)		//ok
					continue;
				// failed!, try to move back
				if (!pAsterisk)
					return FALSE;
				// assign last found char to * and goon
				pMask=pAsterisk;
				str=pStoredPos;
			}
		}	// switch
	}	// while
	return (!*str);
}

#define TXTFILE_KEY "\\txtfile\\shell\\open\\command\\"

BOOL GetTextHandler(CString& sRet, LPCTSTR sFile)
{
	CString sApp;
	HKEY key;
	if (RegOpenKey(HKEY_CLASSES_ROOT, TXTFILE_KEY, &key)==ERROR_SUCCESS)
	{
		LONG lLen = MAX_PATH-1;
		RegQueryValue(key, NULL, sApp.GetBuffer(MAX_PATH), &lLen);
		sApp.ReleaseBuffer();
		RegCloseKey(key);
	}
	if (sApp.IsEmpty())
		sApp = _T("notepad.exe");
	
	if (sApp.Find("%1")>0)
	{
		sApp.Replace("%1", "%s");
		sRet.Format(sApp, sFile);
	}
	else
		sRet.Format("\"%s\" \"%s\"", sApp, sFile);

	return TRUE;
}

BOOL GetAddressesFrom(CString& sFull, CStringArray& as)
{
	if (sFull.Find('<')<0)
	{
		as.Add(sFull);
		return FALSE;
	}
	CString sAddr;
	int nCur = 0;
	while (1)
	{
		int nOpen =	sFull.Find('<', nCur);
		if (nOpen<0)
			break;
		int nClose = sFull.Find('>', nOpen);
		if (nClose<0)
			break;
		sAddr = sFull.Mid(nOpen+1, nClose-nOpen-1);
		nCur = nClose;
		if (sAddr.IsEmpty())
			continue;
		as.Add(sAddr);
	}
	return TRUE;
}
BOOL GetAddressFrom(CString& sFull, CString& sAddr)
{
	int nOpen =	sFull.Find('<');
	if (nOpen<0)
	{
		sAddr = sFull;
		return FALSE;
	}
	int nClose = sFull.Find('>', nOpen);
	if (nClose <= nOpen)
		sAddr = sFull.Mid(nOpen+1);
	else
		sAddr = sFull.Mid(nOpen+1, nClose-nOpen-1);
	return TRUE;
}


//////////////////
CLog::CLog(LPCTSTR filename, int nMaxSize)
{
	CString sPath;
	if (!FindLocalFile(filename, sPath, TRUE))
		return;
	try
	{
		BOOL bExist = (BOOL)(::GetFileAttributes(sPath)!=(DWORD)-1);
		if (!bExist)
			m_bOpen = Open(sPath, CFile::modeCreate|CFile::modeWrite|CFile::typeText);
		else
		{
			m_bOpen = Open(sPath, CFile::modeRead|CFile::modeWrite|CFile::typeText);
			if (!m_bOpen)
				return;
			DWORD dwLen = GetLength();
			if (nMaxSize > 0 && dwLen > (DWORD)nMaxSize )
			{
				Close();
				m_bOpen = FALSE;
				CFile cut;
				cut.Open(sPath, CFile::modeReadWrite|CFile::typeBinary);
				// reset file
				// load 2/3 at file end
				BYTE* pBytes = new BYTE[nMaxSize];
				cut.Seek(nMaxSize/3, CFile::begin);
				DWORD dwRead = cut.Read(pBytes, nMaxSize);
				for (DWORD nOffs = 0; nOffs<dwRead; nOffs++)
				{
					if (pBytes[nOffs]=='\n')
						break;
				}
				cut.SeekToBegin();
				cut.Write(pBytes+nOffs+1, dwRead-nOffs-1);
				delete pBytes;
				cut.SetLength(dwRead-nOffs-1);
				cut.Close();
				m_bOpen = Open(sPath, CFile::modeWrite|CFile::typeText);
				SeekToEnd();
			}
			else 
				SeekToEnd();	// append
		}
	}
	catch (CException*e)
	{
		e->Delete();
	}
	catch (...)
	{
		return;
	}
}
CLog::~CLog()
{
	try
	{
		if (m_bOpen)
			Close();
	}
	catch(CFileException* e)
	{
		e->Delete();
	}
}
void AFX_CDECL CLog::Log(LPCTSTR lpszFormat, ...)
{
	if (!m_bOpen)
		return;
	va_list args;
	va_start(args, lpszFormat);
	_vstprintf(m_szText, lpszFormat, args);
	va_end(args);
	try
	{
		WriteString(m_szText);
	}
	catch(CFileException* e)
	{
		e->Delete();
	}
}

void BFPack(LPBYTE pData, int nLen, BYTE* pKey, int nKeyLen, int nCode)
{
	// prepare BF key
	BFkey_type mainkey;
	if (blowfish_make_bfkey(pKey, nKeyLen, &mainkey))
		return;
	
	// code it by 8 bytes blocks
	int nBlocks = nLen/8;
	LPBYTE pPrev = NULL;	// used in blocks chaining
	bf_cblock  src;
	bf_cblock dst;
	bf_cblock prev;
	for (int bl=0; bl<nBlocks; bl++)
	{
		memset(src, 0, sizeof(src));
		int nSize = sizeof(src);
		memcpy(src, pData, nSize);
		if (pPrev && nCode)
		{
			for (int i=0; i<sizeof(src); i++)
			{
				src[i] ^= prev[i];
			}
		}
		blowfish_crypt(src, dst, &mainkey, (short)nCode);
		if (!nCode && pPrev)
		{	// xor to decode
			for (int i=0; i<sizeof(src); i++)
			{
				dst[i] ^= prev[i];
			}
		}
		if (nCode)
			memcpy(prev, dst, sizeof(src));
		else
			memcpy(prev, src, sizeof(src));
		memcpy(pData, dst, nSize);
		pPrev = pData;
		pData+=nSize;
	}
}


static BYTE EncSign[] = {'M', 'P', 'P', 'F'};	// Magic Password Protected File

// simple hash - CRC32 is slower, fast table implementation is big
// finally, who care about strong encryption here :-))
DWORD GetDataHash(LPBYTE pData, DWORD dwLen)
{
	register DWORD h=0;
	for (DWORD i=0; i<dwLen; i++, pData++)
    {
        h = h * 9551 + (*pData);
    }
    return h;
}


BOOL IsEncrypted(LPBYTE pData, DWORD dwSize)
{
	DWORD SSize = sizeof(EncSign)/sizeof(EncSign[0]);
	if (dwSize<SSize+1)
		return FALSE;
	if (memcmp(pData, EncSign, SSize)!=0)
		return FALSE;
	return TRUE;
}

BOOL DecryptData(LPBYTE &pData, DWORD &dwSize, LPCTSTR sPass)
{
	if (!IsEncrypted(pData, dwSize))
		return FALSE;
	int SSize = sizeof(EncSign)/sizeof(EncSign[0]);
	LPBYTE pTmp = new BYTE[dwSize];
	memcpy(pTmp, pData, dwSize);
	LPBYTE pWork = pTmp + SSize;
	DWORD dwCRC = *((DWORD*)pWork);
	pWork += sizeof(DWORD);
	DWORD dwRealLen = *((DWORD*)pWork);
	pWork += sizeof(DWORD);
	if (dwRealLen>=dwSize)
		return FALSE;

	BFPack(pWork, dwSize-SSize-sizeof(DWORD)*2, (LPBYTE)sPass, strlen(sPass), FALSE);
	DWORD dwCalcCrc = GetDataHash(pWork, dwRealLen);
	if (dwCalcCrc == dwCRC)
	{
		memcpy(pData, pWork, dwRealLen);
		dwSize = dwRealLen;
	}
	delete pTmp;
	return (dwCalcCrc == dwCRC);
}

BOOL EncryptData(LPBYTE &pData, DWORD &dwSize, LPCTSTR sPass)
{
	// prepare new buffer - with padding(10) and place for sign, crc and len
	int SSize = sizeof(EncSign)/sizeof(EncSign[0]);
	DWORD dwNewSize = dwSize + sizeof(DWORD)*2 + SSize + 8;
	LPBYTE pEnc = new BYTE[dwNewSize];
	// signature
	memcpy(pEnc, EncSign, SSize);
	// crc
	DWORD dwCRC = GetDataHash(pData, dwSize);
	*((DWORD*)(pEnc+SSize)) = dwCRC;
	SSize += sizeof(DWORD);
	// size
	*((DWORD*)(pEnc+SSize)) = dwSize;
	SSize += sizeof(DWORD);
	// data
	memcpy(pEnc+SSize, pData, dwSize);
	// padding - with any data, use crc for it
	memcpy(pEnc+SSize+dwSize, &dwCRC, sizeof(DWORD));
	memcpy(pEnc+SSize+dwSize+sizeof(DWORD), &dwCRC, sizeof(DWORD));
	// encryption
	BFPack(pEnc+SSize, dwNewSize-SSize, (LPBYTE)sPass, strlen(sPass), TRUE);
	// return values
	delete pData;	
	pData = pEnc;
	dwSize = dwNewSize;
	return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CColorSample

CColorSample::CColorSample()
{
}

CColorSample::~CColorSample()
{
}


BEGIN_MESSAGE_MAP(CColorSample, CStatic)
	//{{AFX_MSG_MAP(CColorSample)
	ON_WM_CTLCOLOR_REFLECT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CColorSample message handlers

HBRUSH CColorSample::CtlColor(CDC* pDC, UINT ) 
{
	if (m_bStd)
		return NULL;
	if (!m_brSample.m_hObject)
		m_brSample.CreateSolidBrush(GetSysColor(COLOR_WINDOW));
	pDC->SetTextColor(m_clrText);
	pDC->SetBkColor(GetSysColor(COLOR_WINDOW));
	return m_brSample;
}
void CColorSample::SetColor(BOOL bStd, COLORREF rgb)
{
	m_bStd = bStd;
	if (!m_bStd)
		m_clrText = rgb;
	if (m_hWnd)
		Invalidate();
}

BOOL FindIgnoreCase(LPCTSTR s, LPCTSTR SubS)
{
	CString sMain(s);
	CString sSub(SubS);
	sMain.MakeUpper();
	sSub.MakeUpper();
    return sMain.Find(sSub) >= 0;
}

BOOL DoChangeFont(CFont & font, LOGFONT* pLF, BOOL bFixed)
{
	LOGFONT bck;
	memcpy(&bck, pLF, sizeof(LOGFONT));
	CFontDialog dlg;
	dlg.m_cf.lpLogFont=&bck;
	dlg.m_cf.Flags |= (CF_INITTOLOGFONTSTRUCT);
	if (bFixed)
		dlg.m_cf.Flags |= CF_FIXEDPITCHONLY;
	dlg.m_cf.Flags&=~(CF_EFFECTS);
	if (dlg.DoModal()!=IDOK)
		return FALSE;
	if (memcmp(&bck, pLF, sizeof(LOGFONT))==0)
		return FALSE;
	font.DeleteObject();
	font.CreateFontIndirect(&bck);
	memcpy(pLF, &bck, sizeof(LOGFONT));
	return TRUE;
}
void GetFontName(const LOGFONT& lf, CString& s)
{
	int nTextSize;
	CWindowDC dc(NULL);
	int npx=dc.GetDeviceCaps(LOGPIXELSY);
	nTextSize = -MulDiv(lf.lfHeight, 72, npx);
	if (nTextSize < 0)
		 nTextSize = -nTextSize;
	s.Format(_T("%s , %d"), lf.lfFaceName,nTextSize);
}


static const TCHAR* pszL = NULL;
CString _S(int i)
{
	CString sTemp; AfxExtractSubString(sTemp, pszL, i, TCHAR(','));
	return sTemp;
}

#ifdef _UNICODE
	#define _L(i) _wtol(_S(i))
#else
	#define _L(i) atol(_S(i))
#endif

#define _B(i) (BYTE)_L(i)
#define StartConversion(s) pszL = s

BOOL LF2String(LOGFONT& lf, CString& s, BOOL bToString)
{
	if (bToString)
	{
static const TCHAR szLogFontMatch[] = _T("%d,%d,%d,%d,%d,%u,%u,%u,%u,%u,%u,%u,%u,%s");
		s.Format(szLogFontMatch,	lf.lfHeight, lf.lfWidth, lf.lfEscapement, lf.lfOrientation,
									lf.lfWeight, lf.lfItalic,lf.lfUnderline, lf.lfStrikeOut,
									lf.lfCharSet,lf.lfOutPrecision, lf.lfClipPrecision, lf.lfQuality,
									lf.lfPitchAndFamily, lf.lfFaceName);
	return TRUE;
	}
	StartConversion(s);
	lf.lfHeight = _L(0);
	lf.lfWidth = _L(1);
	lf.lfEscapement = _L(2);
	lf.lfOrientation = _L(3);
	lf.lfWeight = _L(4);
	lf.lfItalic = _B(5);
	lf.lfUnderline = _B(6);
	lf.lfStrikeOut = _B(7);
	lf.lfCharSet = _B(8);
	lf.lfOutPrecision = _B(9);
	lf.lfClipPrecision = _B(10);
	lf.lfQuality = _B(11);
	lf.lfPitchAndFamily = _B(12);
	memcpy(lf.lfFaceName, _S(13), LF_FACESIZE);
	return (_tcslen(lf.lfFaceName)>3);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选一区二区| 久久久久久久久久久久久久久99 | 欧美变态凌虐bdsm| eeuss鲁片一区二区三区在线观看| 午夜久久久影院| 亚洲欧美日韩一区二区三区在线观看| 欧美一级片免费看| 91丝袜国产在线播放| 国产一区视频在线看| 午夜亚洲福利老司机| 亚洲色图视频免费播放| 中文字幕精品在线不卡| 欧美videos大乳护士334| 欧美日韩国产综合一区二区三区| 国产精品一区在线观看乱码| 日韩经典中文字幕一区| 亚洲午夜国产一区99re久久| 国产精品久99| 国产嫩草影院久久久久| 欧美变态tickle挠乳网站| 欧美日韩亚州综合| 欧美视频在线一区二区三区 | 亚洲欧洲一区二区三区| 久久久久九九视频| 精品日韩欧美在线| 欧美一区二区大片| 欧美一区二区在线不卡| 欧美日韩一级片在线观看| 欧美亚洲国产一区在线观看网站 | 亚洲成av人在线观看| 一区二区欧美在线观看| 国产精品久久久久婷婷| 欧美国产激情一区二区三区蜜月 | 亚洲国产精品麻豆| 亚洲综合无码一区二区| 亚洲精品中文字幕乱码三区 | 国产精品久久毛片a| 中文字幕不卡在线| 婷婷成人综合网| 亚洲超碰97人人做人人爱| 亚洲影视在线播放| 性久久久久久久久久久久| 亚洲国产精品欧美一二99| 午夜精品久久久久久久| 天涯成人国产亚洲精品一区av| 亚洲成人综合视频| 日韩av电影一区| 麻豆成人在线观看| 国产精品一线二线三线| 成人精品一区二区三区四区| 99v久久综合狠狠综合久久| 色欧美88888久久久久久影院| 一本久久a久久精品亚洲| 欧美系列亚洲系列| 欧美一级免费大片| 久久影院午夜论| 国产精品狼人久久影院观看方式| 亚洲三级电影网站| 三级在线观看一区二区| 国产酒店精品激情| 99久久er热在这里只有精品66| 在线观看日韩毛片| 91精品国产综合久久婷婷香蕉 | 中文字幕av一区二区三区高| 亚洲天堂久久久久久久| 亚洲国产精品一区二区久久 | 欧美一级黄色片| 久久久久久久久久久99999| 国产精品高潮久久久久无| 亚洲一区二区三区在线看| 日韩激情一二三区| 国产高清不卡二三区| 日本高清免费不卡视频| 欧美电视剧在线观看完整版| 日韩电影一二三区| 国产最新精品免费| 色香蕉久久蜜桃| 日韩欧美电影一二三| 亚洲视频一区二区在线观看| 五月天久久比比资源色| 成人免费看的视频| 91精品国产91综合久久蜜臀| 国产亲近乱来精品视频| 视频在线观看91| 99久久99久久精品免费观看| 欧美一区二区三区思思人| 国产精品久久久久久久久动漫 | 91精品办公室少妇高潮对白| 日韩一区二区三区在线视频| 亚洲欧洲色图综合| 男人的天堂亚洲一区| 91浏览器打开| 国产偷国产偷亚洲高清人白洁 | 99视频一区二区三区| 欧美一区午夜视频在线观看| 亚洲欧洲精品一区二区三区| 蜜桃精品视频在线| 日本久久精品电影| 欧美国产一区二区| 久久国产成人午夜av影院| 欧洲另类一二三四区| 国产精品久久久久一区| 国产一区二区日韩精品| 777午夜精品免费视频| 亚洲桃色在线一区| 国产成人在线电影| 精品国偷自产国产一区| 丝袜美腿高跟呻吟高潮一区| 91免费精品国自产拍在线不卡| 久久久噜噜噜久久中文字幕色伊伊| 亚洲综合网站在线观看| 99在线视频精品| 中文字幕精品在线不卡| 国产精品一区免费在线观看| 67194成人在线观看| 一区二区不卡在线播放 | 粉嫩在线一区二区三区视频| 91精品国产欧美一区二区成人| 亚洲视频免费看| 成人免费视频播放| 欧美激情一区二区三区| 国产乱理伦片在线观看夜一区| 日韩一区二区三区在线视频| 日韩精彩视频在线观看| 欧美精品欧美精品系列| 亚洲成a人v欧美综合天堂下载 | 成人永久看片免费视频天堂| 久久综合九色综合97婷婷女人| 日本vs亚洲vs韩国一区三区二区| 久久久综合网站| 国产在线视频不卡二| 精品国产乱码久久久久久久| 韩国精品主播一区二区在线观看| 91精品啪在线观看国产60岁| 日本网站在线观看一区二区三区 | 国产精品18久久久久久久久| www日韩大片| 国产剧情一区二区| 国产亚洲制服色| jiyouzz国产精品久久| 国产精品久久国产精麻豆99网站| a在线播放不卡| 亚洲欧洲综合另类在线| 欧美午夜精品理论片a级按摩| 亚洲动漫第一页| 欧美一区日韩一区| 狠狠色丁香婷婷综合久久片| 久久久久久麻豆| 91在线精品一区二区三区| 亚洲激情图片qvod| 5858s免费视频成人| 精品一区二区免费在线观看| 久久人人爽人人爽| 91在线porny国产在线看| 亚洲午夜一二三区视频| 这里只有精品视频在线观看| 国产在线乱码一区二区三区| 中文字幕 久热精品 视频在线| 91在线你懂得| 日本不卡在线视频| 中文字幕 久热精品 视频在线| 91视频免费播放| 无码av免费一区二区三区试看| 精品粉嫩aⅴ一区二区三区四区| 国产精品99久久久久久久女警 | 国产女人18毛片水真多成人如厕 | 夜夜揉揉日日人人青青一国产精品| 欧美日韩五月天| 精品一区二区国语对白| 中文字幕亚洲区| 91精品国产综合久久婷婷香蕉| 国产伦理精品不卡| 夜夜揉揉日日人人青青一国产精品 | 视频一区在线播放| 国产色爱av资源综合区| 日本韩国精品一区二区在线观看| 石原莉奈在线亚洲三区| 国产精品素人一区二区| 欧美午夜精品久久久久久超碰| 国产一区二区三区精品欧美日韩一区二区三区 | 成人av电影在线播放| 日韩成人一区二区三区在线观看| 国产视频一区二区在线观看| 欧美色窝79yyyycom| 国产高清视频一区| 亚洲成av人片在线| 六月丁香综合在线视频| 国产精品伦理一区二区| 欧美一级欧美三级| 色综合一区二区| 国产一区二区三区免费播放| 亚洲成人自拍网| 中文字幕一区三区| 日韩欧美卡一卡二| 日本高清不卡视频| 成人免费观看视频| 国产一区二区在线免费观看| 亚洲成av人片| 一区二区三区四区视频精品免费 | 国产中文字幕精品|