]> git.tdb.fi Git - libs/core.git/blob - source/io/console.cpp
Use #ifdef _WIN32 rather than WIN32
[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 const Handle &Console::get_handle(Mode m)
43 {
44         check_access(m);
45         return handle;
46 }
47
48 Console &Console::instance(Stream s)
49 {
50         static Console in(CIN);
51         static Console out(COUT);
52         static Console err(CERR);
53
54         switch(s)
55         {
56         case CIN: return in;
57         case COUT: return out;
58         case CERR: return err;
59         }
60
61         throw invalid_argument("Console::instance");
62 }
63
64 Console &cin = Console::instance(Console::CIN);
65 Console &cout = Console::instance(Console::COUT);
66 Console &cerr = Console::instance(Console::CERR);
67
68 } // namespace IO
69 } // namespace Msp