#ifndef __CONSOLE_H
#define __CONSOLE_H
#include <kernel/driver.h>
class CConsole : public IUnknown, public IDevice
{
protected:
dword m_refs;
unsigned short m_con_x, m_con_y, m_width, m_height;
byte m_esc, m_esc1, m_esc2, m_esc3;
word m_attrib;
public:
CConsole();
virtual void UpdateCursor() = 0;
virtual void Output(int x, int y, wchar_t c, word attrib) = 0;
void WriteCharacter(dword mode, wchar_t c);
void SetAttrib(byte attrib);
virtual void Clear() = 0;
virtual void Scroll(int dx, int dy) = 0;
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// IDevice method
STDMETHOD(GetInfo)(device_t* buf);
STDMETHOD(DeviceOpen)();
class CStream : public IUnknown, public IStream
{
protected:
CConsole *m_con;
dword m_mode, m_refs;
public:
CStream(CConsole* con);
~CStream();
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// IStream methods
STDMETHOD_(size_t, Read)(void* buffer, size_t length);
STDMETHOD_(size_t, Write)(const void* buffer, size_t length);
STDMETHOD(SetIoMode)(dword mode);
STDMETHOD(IsReady)();
STDMETHOD(Stat)(folderitem_t* buf);
STDMETHOD(Seek)(long offset, int origin);
};
friend class CStream;
};
#endif