X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvterm.h;h=4ca241b83087f48ac887e03042614369c69abbc1;hb=2462d860630674d10d554f86aa669163f6f2db6b;hp=cd37ebd914408c35c42455fa1e7fd3dab911f20c;hpb=48743e39650eb1ef988380e9d95f27fd40d3a9ce;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vterm.h b/KernelLand/Kernel/drv/vterm.h index cd37ebd9..4ca241b8 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,16 +64,15 @@ 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]; -// tSemaphore InputSemaphore; + Uint32 RawScancode; //!< last raw scancode recieved Uint32 *Buffer; @@ -80,9 +80,17 @@ struct sVTerm // 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 === @@ -98,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); @@ -109,13 +118,14 @@ 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_Resize(tVTerm *Term, int NewWidth, int NewHeight); extern void VT_int_ToggleAltBuffer(tVTerm *Term, int Enabled); #endif