Kernel/VTerm - Add 2DCmd push image support
[tpg/acess2.git] / KernelLand / Kernel / drv / vterm.h
1 /*
2  * Acess2 Kernel
3  * - By John Hodge (thePowersGang)
4  *
5  * drv/vterm.h
6  * - Virtual Terminal - Common
7  */
8 #ifndef _VTERM_H_
9 #define _VTERM_H_
10
11 #include <acess.h>
12 #include <api_drv_video.h>      // tVT_Char
13 #include <api_drv_terminal.h>
14 #include <vfs.h>
15 #include <drv_pty.h>
16
17 // === CONSTANTS ===
18 #define MAX_INPUT_CHARS32       64
19 #define MAX_INPUT_CHARS8        (MAX_INPUT_CHARS32*4)
20 #define DEFAULT_COLOUR  (VT_COL_BLACK|(0xAAA<<16))
21
22 /**
23  * \{
24  */
25 #define VT_FLAG_HIDECSR 0x01    //!< Hide the cursor
26 #define VT_FLAG_ALTBUF  0x02    //!< Alternate screen buffer
27 #define VT_FLAG_RAWIN   0x04    //!< Don't handle ^Z/^C/^V
28 #define VT_FLAG_HASFB   0x10    //!< Set if the VTerm has requested the Framebuffer
29 #define VT_FLAG_SHOWCSR 0x20    //!< Always show the text cursor
30 /**
31  * \}
32  */
33
34 enum eVT_InModes {
35         VT_INMODE_TEXT8,        // UTF-8 Text Mode (VT100/xterm Emulation)
36         VT_INMODE_TEXT32,       // UTF-32 Text Mode (Acess Native)
37         NUM_VT_INMODES
38 };
39
40
41 // === TYPES ==
42 typedef struct sVTerm   tVTerm;
43
44 // === STRUCTURES ===
45 typedef struct
46 {
47         unsigned short  Row;
48         unsigned short  Col;
49 } tVT_Pos;
50
51 struct sVTerm
52 {
53          int    Mode;   //!< Current Mode (see ::eTplTerminal_Modes)
54          int    Flags;  //!< Flags (see VT_FLAG_*)
55
56         void    *VT100Info;
57         
58         short   Width;  //!< Virtual Width
59         short   Height; //!< Virtual Height
60         short   TextWidth;      //!< Text Virtual Width
61         short   TextHeight;     //!< Text Virtual Height
62         
63         Uint32  CurColour;      //!< Current Text Colour
64         
65         size_t  ViewTopRow;     //!< View Buffer Offset (Text Only)
66         tVT_Pos WritePos;       //!< Write Buffer Offset (Text Only)
67         tVT_Char        *Text;
68         
69         tVT_Pos AltWritePos;    //!< Alternate write position
70         tVT_Char        *AltBuf;        //!< Alternate Screen Buffer
71         short   ScrollTop;      //!< Top of scrolling region (smallest)
72         short   ScrollHeight;   //!< Length of scrolling region
73         tVT_Pos SavedWritePos;  //!< Saved cursor position (\e[s and \e[u)
74
75         char    EscapeCodeCache[16];
76         size_t  EscapeCodeLen;
77
78          int    VideoCursorX;
79          int    VideoCursorY;
80         
81         Uint32  RawScancode;    //!< last raw scancode recieved
82         
83         Uint32          *Buffer;
84
85         // TODO: Do I need to keep this about?
86         // When should it be deallocated? on move to text mode, or some other time
87         // Call set again, it's freed, and if NULL it doesn't get reallocated.
88         tVideo_IOCtl_Bitmap     *VideoCursor;
89
90         struct {
91                  int    Current;
92                 size_t  CurrentSize;
93                 size_t  Offset;
94                  int    CachePos;
95                 char    Cache[32];
96                 size_t  PreEat;
97                 union {
98                         struct {
99                                 size_t  Offset;
100                         } Push;
101                 } CmdInfo;
102         } Cmd2D;
103
104         tPTY    *PTY;
105 };
106
107 // === GOBALS ===
108 extern tVTerm   *gpVT_CurTerm;
109 extern int      giVT_Scrollback;
110 extern short    giVT_RealWidth; //!< Screen Width
111 extern short    giVT_RealHeight;        //!< Screen Width
112 extern char     *gsVT_OutputDevice;
113 extern char     *gsVT_InputDevice;
114 extern int      giVT_OutputDevHandle;
115 extern int      giVT_InputDevHandle;
116
117 // === FUNCTIONS ===
118 extern void     VT_SetResolution(int Width, int Height);
119 extern void     VT_SetTerminal(int ID);
120 extern void     VT_int_Handle2DCmd(void *Handle, size_t Length, const void *Data);
121 // --- Output ---
122 extern void     VT_InitOutput(void);
123 extern void     VT_SetMode(int Mode);
124 extern void     VT_int_ScrollFramebuffer( tVTerm *Term, int Count );
125 extern void     VT_int_UpdateCursor( tVTerm *Term, int bShow );
126 extern void     VT_int_UpdateScreen( tVTerm *Term, int UpdateAll );
127 // --- Input ---
128 extern void     VT_InitInput(void);
129 extern void     VT_KBCallBack(Uint32 Codepoint);
130 // --- VT100 Emulation ---
131 extern void     VT_int_ParseEscape_StandardLarge(tVTerm *Term, char CmdChar, int argc, int *args);
132 extern int      VT_int_ParseEscape(tVTerm *Term, const char *Buffer, size_t Bytes);
133 // --- Terminal Buffer ---
134 extern void     VT_int_PutString(tVTerm *Term, const Uint8 *Buffer, Uint Count);
135 extern void     VT_int_PutRawString(tVTerm *Term, const Uint8 *String, size_t Bytes);
136 extern void     VT_int_PutChar(tVTerm *Term, Uint32 Ch);
137 extern void     VT_int_ScrollText(tVTerm *Term, int Count);
138 extern void     VT_int_ClearLine(tVTerm *Term, int Num);
139 extern void     VT_int_ClearInLine(tVTerm *Term, int Row, int FirstCol, int LastCol);
140 extern void     VT_int_Resize(tVTerm *Term, int NewWidth, int NewHeight);
141 extern void     VT_int_ToggleAltBuffer(tVTerm *Term, int Enabled);
142 extern void     VT_int_PutFBData(tVTerm *Term, size_t Offset, size_t Length, const void *Buffer);
143
144 extern tVT_Pos  *VT_int_GetWritePosPtr(tVTerm *Term);
145 extern size_t   VT_int_GetBufferRows(tVTerm *Term);
146
147 #endif
148

UCC git Repository :: git.ucc.asn.au