]> git.tdb.fi Git - libs/core.git/blob - source/io/console.cpp
Add a missing mode flag adjustment to Console::set_block
[libs/core.git] / source / io / console.cpp
1 #include "console.h"
2
3 using namespace std;
4
5 namespace Msp {
6 namespace IO {
7
8 Console::Console(Stream s):
9         stream(s)
10 {
11         mode = (stream==CIN ? M_READ : M_WRITE);
12
13         platform_init();
14
15         if(stream==CIN)
16                 set_events(P_INPUT);
17 }
18
19 void Console::set_block(bool b)
20 {
21         adjust_mode(mode, M_NONBLOCK, !b);
22         sys_set_blocking(handle, b);
23 }
24
25 unsigned Console::do_write(const char *buf, unsigned len)
26 {
27         check_access(M_WRITE);
28
29         return sys_write(handle, buf, len);
30 }
31
32 unsigned Console::do_read(char *buf, unsigned len)
33 {
34         check_access(M_READ);
35
36         unsigned ret = sys_read(handle, buf, len);
37         if(ret==0)
38                 set_eof();
39
40         return ret;
41 }
42
43 const Handle &Console::get_handle(Mode m)
44 {
45         check_access(m);
46         return handle;
47 }
48
49 Console &Console::instance(Stream s)
50 {
51         static Console in(CIN);
52         static Console out(COUT);
53         static Console err(CERR);
54
55         switch(s)
56         {
57         case CIN: return in;
58         case COUT: return out;
59         case CERR: return err;
60         }
61
62         throw invalid_argument("Console::instance");
63 }
64
65 Console &cin = Console::instance(Console::CIN);
66 Console &cout = Console::instance(Console::COUT);
67 Console &cerr = Console::instance(Console::CERR);
68
69 } // namespace IO
70 } // namespace Msp