Add support for console I/O
[libs/core.git] / source / console.h
1 /* $Id$
2
3 This file is part of libmspio
4 Copyright © 2008  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #ifndef MSP_IO_CONSOLE_H_
9 #define MSP_IO_CONSOLE_H_
10
11 #include "base.h"
12
13 namespace Msp {
14 namespace IO {
15
16 /**
17 Provides access to standard input, output and error streams.  This class can't
18 be instantiated directly - use one of the cin, cout and cerr references
19 instead.
20 */
21 class Console: public Base
22 {
23 private:
24         Handle handle;
25
26         Console(unsigned);
27 public:
28         ~Console();
29
30         virtual void set_block(bool);
31         
32         /** If local echo is enabled, characters will appear on the console as they
33         are typed.  Can only be used on an input Console.  */
34         void set_local_echo(bool);
35
36         /** If line buffering is enabled, input will only be available when a
37         newline is encountered.  On some systems, this may also enable line editing.
38         Can only be used on an input Console.
39         */
40         void set_line_buffer(bool);
41
42         virtual Handle get_event_handle();
43 private:
44         virtual unsigned do_write(const char *, unsigned);
45         virtual unsigned do_read(char *, unsigned);
46 public:
47         static Console &instance(unsigned);
48 };
49
50 extern Console &cin;
51 extern Console &cout;
52 extern Console &cerr;
53
54 } // namespace IO
55 } // namespace Msp
56
57 #endif