]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/console.cpp
Rework exceptions for IO
[libs/core.git] / source / io / console.cpp
index 9db77377f0c2267ea2997808764b607d36ffcbea..32b37ef745553811fc4a341d55ad7b3789e256da 100644 (file)
@@ -4,9 +4,11 @@
 #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
@@ -21,7 +23,7 @@ namespace IO {
 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);
 
@@ -66,7 +68,7 @@ void Console::set_block(bool b)
 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;
@@ -83,7 +85,7 @@ void Console::set_local_echo(bool e)
 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;
@@ -101,7 +103,7 @@ void Console::set_line_buffer(bool l)
 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
@@ -118,16 +120,16 @@ void Console::get_size(unsigned &rows, unsigned &cols)
 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;
@@ -136,12 +138,12 @@ unsigned Console::do_write(const char *buf, unsigned len)
 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)
@@ -149,7 +151,7 @@ unsigned Console::do_read(char *buf, unsigned len)
                if(errno==EAGAIN)
                        return 0;
                else
-                       throw SystemError("Reading from console failed", errno);
+                       throw system_error("read");
        }
        else if(ret==0)
                eof_flag = true;
@@ -176,7 +178,7 @@ Console &Console::instance(unsigned n)
        case 2: return err;
        }
 
-       throw InvalidParameterValue("Unknown Console instance requested");
+       throw invalid_argument("Console::instance");
 }
 
 Console &cin = Console::instance(0);