#include <termios.h>
#include <sys/ioctl.h>
#endif
-#include <msp/core/except.h>
+#include <msp/core/systemerror.h>
#include "console.h"
+using namespace std;
+
namespace {
#ifndef WIN32
Console::Console(unsigned n)
{
if(n>2)
- throw InvalidParameterValue("Invalid parameter for Console::Console");
+ throw invalid_argument("Console::Console");
mode = (n==0 ? M_READ : M_WRITE);
void Console::set_local_echo(bool e)
{
if(!(mode&M_READ))
- throw InvalidState("Local echo can only be set on input console");
+ throw invalid_access(M_READ);
#ifdef WIN32
DWORD m;
void Console::set_line_buffer(bool l)
{
if(!(mode&M_READ))
- throw InvalidState("Line buffering can only be set on input console");
+ throw invalid_access(M_READ);
#ifdef WIN32
DWORD m;
void Console::get_size(unsigned &rows, unsigned &cols)
{
if(!(mode&M_WRITE))
- throw InvalidState("Size can only be queried from an output console");
+ throw invalid_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 InvalidState("Console is not writable");
+ throw invalid_access(M_WRITE);
#ifdef WIN32
DWORD ret;
if(!WriteFile(handle, buf, len, &ret, 0))
- throw SystemError("Writing to console failed", GetLastError());
+ throw system_error("WriteFile");
#else
int ret = ::write(handle, buf, len);
if(ret==-1)
- throw SystemError("Writing to console failed", errno);
+ throw system_error("write");
#endif
return ret;
unsigned Console::do_read(char *buf, unsigned len)
{
if(!(mode&M_READ))
- throw InvalidState("Console is not readable");
+ throw invalid_access(M_READ);
#ifdef WIN32
DWORD ret;
if(!ReadFile(handle, buf, len, &ret, 0))
- throw SystemError("Reading from console failed", GetLastError());
+ throw system_error("ReadFile");
#else
int ret = ::read(handle, buf, len);
if(ret==-1)
if(errno==EAGAIN)
return 0;
else
- throw SystemError("Reading from console failed", errno);
+ throw system_error("read");
}
else if(ret==0)
eof_flag = true;
case 2: return err;
}
- throw InvalidParameterValue("Unknown Console instance requested");
+ throw invalid_argument("Console::instance");
}
Console &cin = Console::instance(0);