Kernel/VTerm - Replace offset WritePos with Row,Col pair
[tpg/acess2.git] / KernelLand / Kernel / drv / vterm.h
index 55eea0e..05aad87 100644 (file)
@@ -12,6 +12,7 @@
 #include <api_drv_video.h>     // tVT_Char
 #include <api_drv_terminal.h>
 #include <vfs.h>
+#include <drv_pty.h>
 
 // === CONSTANTS ===
 #define MAX_INPUT_CHARS32      64
@@ -41,13 +42,19 @@ enum eVT_InModes {
 typedef struct sVTerm  tVTerm;
 
 // === STRUCTURES ===
+typedef struct
+{
+       unsigned short  Row;
+       unsigned short  Col;
+} tVT_Pos;
+
 struct sVTerm
 {
         int    Mode;   //!< Current Mode (see ::eTplTerminal_Modes)
         int    Flags;  //!< Flags (see VT_FLAG_*)
+
+       void    *VT100Info;
        
-       short   NewWidth;       //!< Un-applied dimensions (Width)
-       short   NewHeight;      //!< Un-applied dimensions (Height)
        short   Width;  //!< Virtual Width
        short   Height; //!< Virtual Height
        short   TextWidth;      //!< Text Virtual Width
@@ -55,37 +62,41 @@ struct sVTerm
        
        Uint32  CurColour;      //!< Current Text Colour
        
-        int    ViewPos;        //!< View Buffer Offset (Text Only)
-        int    WritePos;       //!< Write Buffer Offset (Text Only)
+       size_t  ViewTopRow;     //!< View Buffer Offset (Text Only)
+       tVT_Pos WritePos;       //!< Write Buffer Offset (Text Only)
        tVT_Char        *Text;
        
+       tVT_Pos AltWritePos;    //!< Alternate write position
        tVT_Char        *AltBuf;        //!< Alternate Screen Buffer
-        int    AltWritePos;    //!< Alternate write position
        short   ScrollTop;      //!< Top of scrolling region (smallest)
        short   ScrollHeight;   //!< Length of scrolling region
+       tVT_Pos SavedWritePos;  //!< Saved cursor position (\e[s and \e[u)
+
+       char    EscapeCodeCache[16];
+       size_t  EscapeCodeLen;
 
         int    VideoCursorX;
         int    VideoCursorY;
        
-       tMutex  ReadingLock;    //!< Lock the VTerm when a process is reading from it
-       tTID    ReadingThread;  //!< Owner of the lock
-        int    InputRead;      //!< Input buffer read position
-        int    InputWrite;     //!< Input buffer write position
-       char    InputBuffer[MAX_INPUT_CHARS8];
        Uint32  RawScancode;    //!< last raw scancode recieved
-//     tSemaphore      InputSemaphore;
        
-       tPGID   OwningProcessGroup;     //!< The process group that owns the terminal
-
        Uint32          *Buffer;
 
        // TODO: Do I need to keep this about?
        // When should it be deallocated? on move to text mode, or some other time
        // Call set again, it's freed, and if NULL it doesn't get reallocated.
        tVideo_IOCtl_Bitmap     *VideoCursor;
-       
-       char    Name[2];        //!< Name of the terminal
-       tVFS_Node       Node;
+
+       struct {
+                int    Current;
+               size_t  CurrentSize;
+               size_t  Offset;
+                int    CachePos;
+               char    Cache[32];
+               size_t  PreEat;
+       } Cmd2D;
+
+       tPTY    *PTY;
 };
 
 // === GOBALS ===
@@ -101,6 +112,7 @@ extern int  giVT_InputDevHandle;
 // === FUNCTIONS ===
 extern void    VT_SetResolution(int Width, int Height);
 extern void    VT_SetTerminal(int ID);
+extern void    VT_int_Handle2DCmd(void *Handle, size_t Length, const void *Data);
 // --- Output ---
 extern void    VT_InitOutput(void);
 extern void    VT_SetMode(int Mode);
@@ -112,14 +124,19 @@ extern void       VT_InitInput(void);
 extern void    VT_KBCallBack(Uint32 Codepoint);
 // --- VT100 Emulation ---
 extern void    VT_int_ParseEscape_StandardLarge(tVTerm *Term, char CmdChar, int argc, int *args);
-extern int     VT_int_ParseEscape(tVTerm *Term, const char *Buffer);
+extern int     VT_int_ParseEscape(tVTerm *Term, const char *Buffer, size_t Bytes);
 // --- Terminal Buffer ---
 extern void    VT_int_PutString(tVTerm *Term, const Uint8 *Buffer, Uint Count);
+extern void    VT_int_PutRawString(tVTerm *Term, const Uint8 *String, size_t Bytes);
 extern void    VT_int_PutChar(tVTerm *Term, Uint32 Ch);
 extern void    VT_int_ScrollText(tVTerm *Term, int Count);
 extern void    VT_int_ClearLine(tVTerm *Term, int Num);
-extern void    VT_int_ChangeMode(tVTerm *Term, int NewMode, int NewWidth, int NewHeight);
+extern void    VT_int_ClearInLine(tVTerm *Term, int Row, int FirstCol, int LastCol);
+extern void    VT_int_Resize(tVTerm *Term, int NewWidth, int NewHeight);
 extern void    VT_int_ToggleAltBuffer(tVTerm *Term, int Enabled);
 
+extern tVT_Pos *VT_int_GetWritePosPtr(tVTerm *Term);
+extern size_t  VT_int_GetBufferRows(tVTerm *Term);
+
 #endif
 

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