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

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

?? stdio.cpp

?? Evc編的一個在wince5.0上運行的flash播放器
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
 * Append "t" or "b" for text and binary mode.
 *  "tu" forces the text-mode to Unicode; "ts" to Ansi.
 */

BOOL CXFileStream::Open(const TCHAR* pszPathName, const char* pszMode)
{
	if (NULL != _h)
		Close();

	BOOL fTruncate = FALSE, fCreateIfNecessary = FALSE;

	// Crack the 'mode' arg
	_fReading = _fWriting = _fAppending = FALSE;
	switch (*pszMode++)
	{
	case 'r':
		_fReading = TRUE;
		fCreateIfNecessary = FALSE;
		break;
	case 'w':
		_fWriting = TRUE;
		fTruncate = TRUE;
		fCreateIfNecessary = TRUE;
		break;
	case 'a':
		_fWriting = TRUE;
		_fAppending = TRUE;
		fTruncate = FALSE;
		fCreateIfNecessary = TRUE;
		break;
	default:
		return FALSE;
	}

	BOOL fForceUnicode = FALSE;
	BOOL fForceANSI = FALSE;
	BOOL fForceCooked = FALSE;
	BOOL fForceRaw = FALSE;

	while (*pszMode)
	{
		switch (*pszMode++)
		{
		case '+':
			if (_fReading) // r
				_fWriting = TRUE;
			else if (_fWriting) // w, a
				_fReading = TRUE;
			break;
		case 't':
			if (fForceRaw)
				return FALSE;
			fForceCooked = TRUE;
			break;
		case 'u':
			if (fForceANSI || fForceRaw)
				return FALSE;
			fForceCooked = TRUE;
			fForceUnicode = TRUE;
			break;
		case 's':
			if (fForceUnicode || fForceRaw)
				return FALSE;
			fForceCooked = TRUE;
			fForceANSI = TRUE;
			break;
		case 'b':
			if (fForceCooked)
				return FALSE;
			fForceRaw = TRUE;
			break;
		default:
			return FALSE;
		}
	}

	// Default read/write modes.
	// Lets i/o to native textfiles (e.g. *.scm) succeed.
	// Pocket Office uses ANSI textfiles! Go figure. Win95 braindamage?

	_fCooked = fForceCooked || !fForceRaw; // if neither, default to cooked
	_fUseUnicode = !(fForceANSI || !fForceUnicode); // if neither, default to ansi

	DWORD dwAccess = 0L;
	if (_fReading)
		dwAccess |= GENERIC_READ;
	if (_fWriting)
		dwAccess |= GENERIC_WRITE;
	DWORD dwShare = FILE_SHARE_READ;
	if (!_fWriting)
		dwShare |= FILE_SHARE_WRITE;
	DWORD dwCreate = 0L;
	if (!fCreateIfNecessary)
		dwCreate = OPEN_EXISTING;
	else if (fTruncate)
		dwCreate = CREATE_ALWAYS;
	else
		dwCreate = OPEN_ALWAYS;

	HANDLE h = ::CreateFile(pszPathName, dwAccess, dwShare, NULL, dwCreate, FILE_ATTRIBUTE_NORMAL, NULL);
	if (INVALID_HANDLE_VALUE == h)
		return FALSE;
	_h = h;

	BOOL fFoundUnicodeBOM = FALSE;

	if (_fCooked && _fReading)
	{
		// For read-only files, the presence or absence of the Unicode start sequence
		// dictates Unicode-mode, rather than the mode flags.

		WCHAR wch;
		DWORD cbReadActual = 0L;

		if (::ReadFile(_h, &wch, sizeof(wch), &cbReadActual, NULL) 
			&& (sizeof(wch) == cbReadActual)
			&& (wch == 0xFEFF))
		{
			// Indeed, file is Unicode.
			_fUseUnicode = TRUE;
			fFoundUnicodeBOM = TRUE;
		}
		else
		{
			::SetFilePointer(_h, 0, NULL, FILE_BEGIN);
			if (!_fWriting)
				_fUseUnicode = FALSE;
		}
	}
	if (_fCooked && _fWriting && _fUseUnicode && !fFoundUnicodeBOM)
	{
		// New cooked-output Unicode files need the Unicode BOM.

		WCHAR wch = 0xFEFF;
		DWORD cbWritten = 0L;

		if (::WriteFile(_h, &wch, sizeof(wch), &cbWritten, NULL) 
			&& (sizeof(wch) == cbWritten))
		{
			// File successfully stamped as Unicode.
			fFoundUnicodeBOM = TRUE;
		}
		else
		{
			::CloseHandle(_h);
			_h = NULL;
			return FALSE;
		}
	}

	return TRUE;
}


FILE *fopen( const char *filename, const char *mode )
{
	for (int i = 0; i < MAXOPENFILES; ++i)
	{
		if (!RgStdioFiles[i].fActive)
		{
			TCHAR szPath[260+1];
			int cch = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, filename, -1,
				szPath, sizeof(szPath)/sizeof(TCHAR));
			if (0 == cch)
				return NULL;

			CXFileStream* pstream = new CXFileStream;
			if (!pstream)
				return NULL;
			if (!pstream->Open(szPath, mode))
			{
				delete pstream;
				return NULL;
			}
			RgStdioFiles[i].pstream = pstream;
			RgStdioFiles[i].fActive = TRUE;
			return &RgStdioFiles[i];
		}
	}
	return NULL;
}


int fflush( FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	stream->pstream->Flush();
	return 0;
}


int fclose( FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	if (stdin == stream || stdout == stream)
		return -1;
	((CXFileStream*)(stream->pstream))->Close();
	delete stream->pstream;
	stream->pstream = NULL;
	stream->fActive = FALSE;
	return 0;
}


size_t fread( void *buffer, size_t size, size_t count, FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	unsigned cbActual;
	stream->pstream->Read((BYTE*)buffer, size*count, &cbActual);
	return (size_t)cbActual;
}


size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	unsigned cbActual;
	stream->pstream->Write((BYTE*)buffer, size*count, &cbActual);
	return (size_t)cbActual;
}


int getc( FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	unsigned char ch;
	unsigned cbActual = 0;
	stream->pstream->Read(&ch, 1, &cbActual);
	if (cbActual != 1)
		return EOF;
	return (int)ch;
}


int putc( int c, FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	unsigned char ch = (unsigned char)(unsigned int)c;
	unsigned cbActual = 0;
	stream->pstream->Write(&ch, 1, &cbActual);
	if (cbActual != 1)
		return EOF;
	return (int)ch;
}


int ungetc( int c, FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	if (EOF != c)
		stream->pstream->Pushback((unsigned char)(unsigned int)c);
	return c;
}


long ftell( FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	return (long)(stream->pstream->Tell());
}


int fseek( FILE *stream, long offset, int origin )
{
	if (IsInvalidFile(stream))
		return -1;
	if (!stream->pstream->Seek(offset, origin))
		return -1; // error
	return 0;
}


char *fgets( char *string, int n, FILE *stream )
{
	if (IsInvalidFile(stream))
		return NULL;
	char* pch = string;
	int cchRemaining = n-1;
	CXStdioStream *const pstream = stream->pstream;
	while (cchRemaining-- > 0)
	{
		unsigned char ch;
		unsigned cbActual = 0;
		pstream->Read(&ch, 1, &cbActual);
		if (cbActual != 1)
		{
			*pch = 0;
			return NULL;
		}

		*pch++ = ch;
		if ('\n' == ch)
			break;
	}
	*pch = 0;

	return string;
}


int fputs( const char *string, FILE *stream )
{
	if (IsInvalidFile(stream))
		return -1;
	const unsigned cbGiven = strlen(string);
	unsigned cbActual = 0;
	stream->pstream->Write((const BYTE*)string, cbGiven, &cbActual);
	return (cbGiven == cbActual ? 1 : EOF);
}


static int _output(char* buffer, const char* format, va_list argptr)
{
	int cchFormat = strlen(format);
	TCHAR szFormat[128];
	const int cchFormatMax = sizeof(szFormat)/sizeof(TCHAR)-1;

	if (cchFormat > cchFormatMax)
		return 0;
	int i = mbstowcs(szFormat, format, cchFormatMax);
	if (((size_t)-1) == ((size_t)i))
		return 0;
	if (cchFormatMax == i)
		szFormat[cchFormatMax] = 0;
	cchFormat = i;

	// Patch format string to accommodate CE's Unicode sensibilities
	// %s -> %S
	// %c -> %C
	BOOL fFmt; // set when within a format-specifier
	for (i = 0, fFmt = FALSE; i < cchFormatMax && szFormat[i] != 0; ++i)
	{
		switch (szFormat[i])
		{
		case L'%':
			fFmt = !fFmt;
			break;
		case L'0':
		case L'1':
		case L'2':
		case L'3':
		case L'4':
		case L'5':
		case L'6':
		case L'7':
		case L'8':
		case L'9':
		case L'.':
			// Precision/width specifier: part of format
			break;
		case L'c':
			if (fFmt)
			{
				szFormat[i] = L'C';
				fFmt = FALSE;
			}
			break;
		case L's':
			if (fFmt)
			{
				szFormat[i] = L'S';
				fFmt = FALSE;
			}
			break;
		default:
			if (fFmt)
				fFmt = FALSE;
			break;
		}
	}

	// Put a fence on either side of output buffer to detect overflow.
	//$ BUGBUG - no bounds checking on this small buffer.
	// I wish that the CE RTL had _vnswprintf

	volatile int nFence0 = 1;
	TCHAR szOut[256];
	volatile int nFence1 = 1;

	const int cchOutMax = sizeof(szOut)/sizeof(TCHAR)-1;
	// This version from the crt (as opposed to wvsprintf) handles %g
	i = vswprintf(szOut, szFormat, argptr);
	assert(nFence0 == 1 && nFence1 == 1);
	if (nFence0 != 1 || nFence1 != 1)
		return 0;
	if (0 == i)
		return 0;
	if (cchOutMax == i)
		szOut[cchOutMax] = 0;

	// Now convert to mbcs.
	//$ REVIEW - if xstdio had wide-char entry points,
	// the fprintf version could zap this here into WriteW,
	// saving a wcs-to-mbcs-to-wcs round trip

	i = wcstombs(buffer, szOut, cchOutMax);
	if (((size_t)-1) == ((size_t)i))
		return 0;
	if (cchOutMax == i)
		buffer[cchOutMax] = 0;
	return i;
}


int __cdecl sprintf( char *buffer, const char *format, ... )
{
	va_list arglist;
	va_start(arglist, format);
	int i = _output(buffer, format, arglist);
	va_end(arglist);
	return i;
}


int __cdecl fprintf( FILE *stream, const char *format, ... )
{
	if (IsInvalidFile(stream))
		return 0;

	char szTmp[256];
	va_list arglist;
	va_start(arglist, format);
	int i = _output(szTmp, format, arglist);
	va_end(arglist);
	//$ REVIEW - would be good to short-circuit the wcs-mbcs-wcs loop
	fputs(szTmp, stream);
	return i;
}


int __cdecl printf( const char *format, ... )
{
	if (IsInvalidFile(stdout))
		return 0;

	char szTmp[256];
	va_list arglist;
	va_start(arglist, format);
	int i = _output(szTmp, format, arglist);
	va_end(arglist);
	//$ REVIEW - would be good to short-circuit the wcs-mbcs-wcs loop
	fputs(szTmp, stdout);
	return i;
}


int StdioCharReady( FILE *stream )
{
	if (IsInvalidFile(stream))
		return 0;
	return (stream->pstream->CharReady());
}



#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久最新网址| 懂色av中文一区二区三区| 国产一区二区三区国产| 成人晚上爱看视频| 欧美艳星brazzers| 欧美成人a∨高清免费观看| 国产欧美日韩精品一区| 一区二区三区蜜桃| 激情综合色综合久久综合| 成人午夜电影久久影院| 欧美在线观看一区二区| 久久色.com| 亚洲精品视频免费观看| 麻豆国产欧美一区二区三区| 国产a视频精品免费观看| 欧美三级韩国三级日本三斤| 久久精品一区二区| 亚洲成人免费av| 国产91精品在线观看| 777色狠狠一区二区三区| 欧美国产97人人爽人人喊| 一本大道久久精品懂色aⅴ | 国产欧美日韩在线| 亚洲电影中文字幕在线观看| 国产精品69毛片高清亚洲| 欧美日高清视频| 亚洲欧洲精品成人久久奇米网 | 精品国产一二三| 伊人夜夜躁av伊人久久| 国产精品中文字幕日韩精品| 777xxx欧美| 一区二区在线观看视频在线观看| 国产老肥熟一区二区三区| 欧美精品亚洲一区二区在线播放| 日本一区二区电影| 麻豆传媒一区二区三区| 欧美性淫爽ww久久久久无| 国产精品国产自产拍高清av| 九九精品一区二区| 欧美另类高清zo欧美| 亚洲色图在线看| 懂色av一区二区三区蜜臀| 精品免费视频一区二区| 午夜伊人狠狠久久| 日本久久电影网| 中文字幕免费一区| 国产精品一区二区在线播放| 欧美一级淫片007| 午夜精品在线视频一区| 国产精品久线观看视频| 国产一区在线看| 欧美mv日韩mv亚洲| 日韩中文字幕不卡| 欧美日韩综合不卡| 一区二区三区蜜桃| 色乱码一区二区三区88| 国产精品二三区| 不卡的av在线| 国产精品久线观看视频| 成人精品小蝌蚪| 国产欧美精品一区二区三区四区| 国产伦精品一区二区三区免费 | 久久国产生活片100| 欧美一区二区二区| 日韩国产一二三区| 欧美美女网站色| 亚洲成av人在线观看| 欧美色涩在线第一页| 亚洲一区二区三区激情| 亚洲免费观看高清在线观看| 国产91在线看| 中文字幕+乱码+中文字幕一区| 国产乱码精品1区2区3区| 久久亚洲精精品中文字幕早川悠里| 久久精工是国产品牌吗| 精品国产百合女同互慰| 国产综合久久久久久久久久久久| 亚洲精品一区二区三区99| 国内外精品视频| 国产欧美一区二区精品性色超碰| 国产自产视频一区二区三区| 26uuu欧美| 成人白浆超碰人人人人| 亚洲欧洲精品一区二区三区不卡 | 一区二区免费看| 欧美日韩另类一区| 男女激情视频一区| 精品国产麻豆免费人成网站| 精品亚洲成av人在线观看| 国产网站一区二区三区| 国产精品国产自产拍高清av| 97se亚洲国产综合自在线观| 亚洲与欧洲av电影| 欧美一级国产精品| 国产成人免费av在线| 国产精品黄色在线观看| 欧美亚洲一区二区在线| 蜜桃av一区二区在线观看| 国产亚洲综合性久久久影院| 99精品欧美一区二区蜜桃免费| 亚洲国产精品久久不卡毛片| 日韩欧美一区二区在线视频| 国产成人免费9x9x人网站视频| 亚洲女性喷水在线观看一区| 欧美老年两性高潮| 国产馆精品极品| 亚洲一区二区三区美女| 欧美不卡在线视频| av在线播放一区二区三区| 亚洲自拍欧美精品| 日韩免费电影网站| 成人av高清在线| 天天射综合影视| 欧美激情综合五月色丁香| 欧日韩精品视频| 久久国产精品99精品国产 | 色综合久久六月婷婷中文字幕| 日韩精品乱码免费| 欧美激情一区二区在线| 精品视频全国免费看| 国产曰批免费观看久久久| 亚洲精品中文在线观看| 欧美tickling挠脚心丨vk| 色综合久久久久| 日韩欧美在线123| 99热国产精品| 免费精品视频在线| 综合久久久久久| 日韩欧美电影一二三| 99国内精品久久| 精品影视av免费| 亚洲一区二区高清| 国产清纯在线一区二区www| 欧美婷婷六月丁香综合色| 国产成人精品亚洲午夜麻豆| 亚洲国产精品一区二区久久恐怖片 | 中文在线资源观看网站视频免费不卡 | 国产亚洲一本大道中文在线| 欧美视频完全免费看| 成人一区二区三区| 日本不卡123| 亚洲福利视频导航| 国产精品成人免费精品自在线观看 | 一区二区视频在线看| 久久久久久久综合| 在线观看91av| 欧美在线一二三| 白白色亚洲国产精品| 久久精品国产亚洲高清剧情介绍 | 91精品国产综合久久香蕉麻豆| 成人国产视频在线观看| 精品制服美女丁香| 视频一区视频二区中文字幕| av电影天堂一区二区在线| 国产美女精品在线| 麻豆精品一区二区| 日韩和欧美的一区| 亚洲综合激情另类小说区| 亚洲欧美另类综合偷拍| 国产精品视频yy9299一区| 国产亚洲制服色| 久久久蜜臀国产一区二区| 日韩精品一区二区三区视频| 91精品国产综合久久久久久漫画 | 亚洲123区在线观看| 一区二区三区在线播| 国产精品国模大尺度视频| 亚洲国产精品成人综合色在线婷婷| 久久亚洲影视婷婷| 亚洲精品在线免费观看视频| 日韩一区二区三区观看| 欧美另类变人与禽xxxxx| 一区二区三区四区国产精品| 国产精品国产精品国产专区不片| 久久亚洲二区三区| 久久新电视剧免费观看| 久久亚洲一级片| 久久久精品综合| 久久男人中文字幕资源站| 久久久亚洲综合| 国产视频一区不卡| 亚洲国产激情av| 国产精品久久一卡二卡| 亚洲欧洲av另类| 有坂深雪av一区二区精品| 亚洲精品欧美激情| 亚洲国产视频直播| 亚洲444eee在线观看| 日韩vs国产vs欧美| 蜜桃在线一区二区三区| 国内成人免费视频| 国产91精品一区二区| 99精品黄色片免费大全| 色久综合一二码| 欧美区一区二区三区| 婷婷综合另类小说色区| 日韩成人一级大片| 韩国av一区二区| 成人国产精品免费| 91在线国产福利|