]> git.tdb.fi Git - libs/core.git/blob - source/io/console.cpp
Move most platform-specific code into overlay directories
[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         sys_set_blocking(handle, b);
22 }
23
24 unsigned Console::do_write(const char *buf, unsigned len)
25 {
26         check_access(M_WRITE);
27
28         return sys_write(handle, buf, len);
29 }
30
31 unsigned Console::do_read(char *buf, unsigned len)
32 {
33         check_access(M_READ);
34
35         unsigned ret = sys_read(handle, buf, len);
36         if(ret==0)
37                 set_eof();
38
39         return ret;
40 }
41
42 Console &Console::instance(Stream s)
43 {
44         static Console in(CIN);
45         static Console out(COUT);
46         static Console err(CERR);
47
48         switch(s)
49         {
50         case CIN: return in;
51         case COUT: return out;
52         case CERR: return err;
53         }
54
55         throw invalid_argument("Console::instance");
56 }
57
58 Console &cin = Console::instance(Console::CIN);
59 Console &cout = Console::instance(Console::COUT);
60 Console &cerr = Console::instance(Console::CERR);
61
62 } // namespace IO
63 } // namespace Msp