void Console::set_local_echo(bool e)
{
- if(!(mode&M_READ))
- throw invalid_access(M_READ);
+ check_access(M_READ);
#ifdef WIN32
DWORD m;
void Console::set_line_buffer(bool l)
{
- if(!(mode&M_READ))
- throw invalid_access(M_READ);
+ check_access(M_READ);
#ifdef WIN32
DWORD m;
void Console::get_size(unsigned &rows, unsigned &cols)
{
- if(!(mode&M_WRITE))
- throw invalid_access(M_WRITE);
+ check_access(M_WRITE);
#ifdef WIN32
// XXX Figure out how to do this
unsigned Console::do_write(const char *buf, unsigned len)
{
- if(!(mode&M_WRITE))
- throw invalid_access(M_WRITE);
+ check_access(M_WRITE);
-#ifdef WIN32
- DWORD ret;
- if(!WriteFile(*handle, buf, len, &ret, 0))
- throw system_error("WriteFile");
-#else
- int ret = ::write(*handle, buf, len);
- if(ret==-1)
- throw system_error("write");
-#endif
-
- return ret;
+ return sys_write(handle, buf, len);
}
unsigned Console::do_read(char *buf, unsigned len)
{
- if(!(mode&M_READ))
- throw invalid_access(M_READ);
+ check_access(M_READ);
-#ifdef WIN32
- DWORD ret;
- if(!ReadFile(*handle, buf, len, &ret, 0))
- throw system_error("ReadFile");
-#else
- int ret = ::read(*handle, buf, len);
- if(ret==-1)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw system_error("read");
- }
- else if(ret==0)
- eof_flag = true;
-#endif
+ unsigned ret = sys_read(handle, buf, len);
+ if(ret==0)
+ set_eof();
return ret;
}