⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdioimp.h

📁 evc 下的flash播放器源码
💻 H
字号:
// Copyright 1998, Ben Goetter.  All rights reserved.

/* stdioimp.h - implementation of stdio */

#ifndef __STDIOIMP_H__
#define __STDIOIMP_H__

#if defined(IMPLEMENTS_STDIO) && !defined(STDIO_API)
#define STDIO_API __declspec(dllexport) 
#else
#define STDIO_API __declspec(dllimport) 
#endif


class STDIO_API CXStdioStream
{
protected:
	BOOL	_fPushback;	// set if ungetc called
	unsigned char _chPushback; 
	
	BOOL	_fReading;
	BOOL	_fWriting;
	BOOL	_fAppending;
	BOOL	_fCooked;	// If set, munge i/o to/from Unicode

public:
	CXStdioStream();
	virtual ~CXStdioStream();

	virtual void OnHibernate() = 0;

	virtual void Read(BYTE* pbIn, unsigned cbInMax, unsigned* pcbInActual);
	virtual void Write(const BYTE* pbOut, unsigned cbOut, unsigned* pcbOutActual);
	virtual BOOL Seek(int, int);
	virtual unsigned Tell();
	virtual void Flush();
	virtual void Pushback(unsigned char ch);
	virtual int CharReady();
};


class STDIO_API CXBufferedStream: public CXStdioStream
{
protected:
	BYTE *		_pbBuffer;
	unsigned	_cbBuffer;	// allocation size

	BOOL RequireBuffer(unsigned);
	void ReleaseBuffer();

public:
	CXBufferedStream();
	virtual ~CXBufferedStream();
};


class STDIO_API CXBufferedReadStream: public CXBufferedStream
{
protected:
	unsigned	_cbActual;
	unsigned	_ibCurrent;
#if 0  // for stdin Seek/Tell - nyi
	unsigned	_cbReadTotal;
#endif

	void ResetReadBuffer()
		{ _ibCurrent = 0; _cbActual = 0; }

	// Load _pbBuffer; set _cbActual.  Called by Read()
	virtual BOOL LoadReadBuffer(unsigned cbHint) = 0;

public:
	CXBufferedReadStream();
	virtual ~CXBufferedReadStream();
	virtual void OnHibernate();

	virtual void Read(BYTE* pbIn, unsigned cbInMax, unsigned* pcbInActual);
};


class STDIO_API CXFileStream: public CXBufferedReadStream
{
private:
	HANDLE	 _h;
	BOOL	 _fUseUnicode;
	unsigned _cchCRsEaten;

	void ResetReadBuffer()
		{ _cchCRsEaten = 0; CXBufferedReadStream::ResetReadBuffer(); }

	virtual BOOL LoadReadBuffer(unsigned cbHint);

	unsigned TellUnbuffered();

public:
	CXFileStream();
	virtual ~CXFileStream();

	virtual void Write(const BYTE* pbOut, unsigned cbOut, unsigned* pcbOutActual);
	virtual BOOL Seek(int, int);
	virtual unsigned Tell();

	BOOL Open(const TCHAR* pszPathName, const char* pszMode);
	void Close();

	BOOL IsFree() const { return (NULL == _h); }
};


extern STDIO_API
BOOL CookInputTextWA(const WCHAR* pwchSrc, unsigned cchSrc, 
				     char* pchDst0, unsigned cbInAvail, unsigned* pcbEmitted,
				     BOOL* pfHadTrailingCR = NULL,
				     unsigned* pcchCRsEaten = NULL);

extern STDIO_API
BOOL CookInputTextAA(const char* pchSrc, unsigned cchSrc, 
				     char* pchDst0, unsigned cbInAvail, unsigned* pcbEmitted,
				     BOOL* pfHadTrailingCR = NULL,
				     unsigned* pcchCRsEaten = NULL);

extern STDIO_API
BOOL CookOutputTextAW(const char* pchSrc, unsigned cbSrc, unsigned cbNewlines,
                      WCHAR* pwchDst, unsigned cchAvailable, unsigned* pcchEmitted );

extern STDIO_API
BOOL CookOutputTextAA(const char* pchSrc, unsigned cbSrc, unsigned cbNewlines,
				      char* pchDst, unsigned cchAvailable, unsigned* pcchEmitted );


extern STDIO_API void StdioInitStdin(CXStdioStream*);

extern STDIO_API void StdioInitStdout(CXStdioStream*);



#endif // end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -