X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvterm.h;h=05aad87a458ccb0376805c9be956e61816a48f42;hb=7b64f5e7f00e445a5637e9e3289a1332a14d28e5;hp=55eea0e5dc950b41c72be821dfe48123ea545d2a;hpb=7f906c4c7c6828b5ed6f210453c8aff28cfa5942;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vterm.h b/KernelLand/Kernel/drv/vterm.h index 55eea0e5..05aad87a 100644 --- a/KernelLand/Kernel/drv/vterm.h +++ b/KernelLand/Kernel/drv/vterm.h @@ -12,6 +12,7 @@ #include // tVT_Char #include #include +#include // === 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