📄 stdioimp.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 + -