1#ifndef _CONSOLE_H_
2#define _CONSOLE_H_
3
4#include <SupportDefs.h>
5
6#define TAB_SIZE 8
7#define TAB_MASK 7
8
9#define FMASK 0x0f
10#define BMASK 0x70
11
12typedef enum {
13	CONSOLE_STATE_NORMAL = 0,
14	CONSOLE_STATE_GOT_ESCAPE,
15	CONSOLE_STATE_SEEN_BRACKET,
16	CONSOLE_STATE_NEW_ARG,
17	CONSOLE_STATE_PARSING_ARG,
18} console_state;
19
20typedef enum {
21	SCREEN_ERASE_WHOLE,
22	SCREEN_ERASE_UP,
23	SCREEN_ERASE_DOWN
24} erase_screen_mode;
25
26typedef enum {
27	LINE_ERASE_WHOLE,
28	LINE_ERASE_LEFT,
29	LINE_ERASE_RIGHT
30} erase_line_mode;
31
32#define MAX_ARGS 8
33
34class ViewBuffer;
35
36class Console {
37public:
38							Console(ViewBuffer *output);
39							~Console();
40
41		void				ResetConsole();
42
43		void				SetScrollRegion(int top, int bottom);
44		void				ScrollUp();
45		void				ScrollDown();
46
47		void				LineFeed();
48		void				RLineFeed();
49		void				CariageReturn();
50
51		void				Delete();
52		void				Tab();
53
54		void				EraseLine(erase_line_mode mode);
55		void				EraseScreen(erase_screen_mode mode);
56
57		void				SaveCursor(bool save_attrs);
58		void				RestoreCursor(bool restore_attrs);
59		void				UpdateCursor(int x, int y);
60		void				GotoXY(int new_x, int new_y);
61
62		void				PutChar(const char c);
63
64		void				SetVT100Attributes(int32 *args, int32 argCount);
65		bool				ProcessVT100Command(const char c, bool seen_bracket, int32 *args, int32 argCount);
66
67		void				Write(const void *buf, size_t len);
68
69private:
70static	void				ResizeCallback(int32 width, int32 height, void *data);
71
72		int32				fLines;
73		int32				fColumns;
74
75		uint8				fAttr;
76		uint8				fSavedAttr;
77		bool				fBrightAttr;
78		bool				fReverseAttr;
79
80		int32				fX;				// current x coordinate
81		int32				fY;				// current y coordinate
82		int32				fSavedX;		// used to save x and y
83		int32				fSavedY;
84
85		int32				fScrollTop;		// top of the scroll region
86		int32				fScrollBottom;	// bottom of the scroll region
87
88		/* state machine */
89		console_state		fState;
90		int32				fArgCount;
91		int32				fArgs[MAX_ARGS];
92
93		ViewBuffer			*fOutput;
94};
95
96#endif
97