e2b5d533cc0f1ac6d45749fbbbde7f9b712b5688
[libs/core.git] / source / io / console.h
1 #ifndef MSP_IO_CONSOLE_H_
2 #define MSP_IO_CONSOLE_H_
3
4 #include "eventobject.h"
5 #include "handle.h"
6
7 namespace Msp {
8 namespace IO {
9
10 /**
11 Provides access to standard input, output and error streams.  This class can't
12 be instantiated directly - use one of the cin, cout and cerr references
13 instead.
14 */
15 class Console: public EventObject
16 {
17 public:
18         enum Stream
19         {
20                 CIN = 0,
21                 COUT = 1,
22                 CERR = 2
23         };
24
25 private:
26         Stream stream;
27         Handle handle;
28
29         Console(Stream);
30         void platform_init();
31 public:
32         ~Console();
33
34         virtual void set_block(bool);
35         
36         /** If local echo is enabled, characters will appear on the console as they
37         are typed.  Can only be used on an input Console.  */
38         void set_local_echo(bool);
39
40         /** If line buffering is enabled, input will only be available when a
41         newline is encountered.  On some systems, this may also enable line editing.
42         Can only be used on an input Console.
43         */
44         void set_line_buffer(bool);
45
46         /** Retrieves the size of the Console.  Can only be used on an output
47         Console. */
48         void get_size(unsigned &rows, unsigned &cols);
49
50         /** Redirects input from or output to another I/O object.  This performs a
51         system-level redirect.  Closing the other object won't affect the
52         redirection. */
53         void redirect(Base &);
54
55 protected:
56         virtual unsigned do_write(const char *, unsigned);
57         virtual unsigned do_read(char *, unsigned);
58
59 public:
60         virtual const Handle &get_handle(Mode);
61         virtual const Handle &get_event_handle() { return handle; }
62
63         static Console &instance(Stream);
64 };
65
66 extern Console &cin;
67 extern Console &cout;
68 extern Console &cerr;
69
70 } // namespace IO
71 } // namespace Msp
72
73 #endif