X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvterm.h;h=65cdd651399ce3bfe314097624ae6ebce41ffe8f;hb=07ed0e7479fc741a947579d4460a25a050fc9260;hp=abd786cb93d6c8657755c02323fb0a65ebb69418;hpb=b0da731b2d89b9dd58de2c98eaf6218a41a21920;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vterm.h b/KernelLand/Kernel/drv/vterm.h index abd786cb..65cdd651 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 @@ -45,9 +46,9 @@ 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 @@ -63,29 +64,33 @@ struct sVTerm int AltWritePos; //!< Alternate write position short ScrollTop; //!< Top of scrolling region (smallest) short ScrollHeight; //!< Length of scrolling region + int 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 +106,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); @@ -115,10 +121,12 @@ extern void VT_int_ParseEscape_StandardLarge(tVTerm *Term, char CmdChar, int arg 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); #endif