X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvterm.c;h=217557058c0376ae5507092f951d9e037ebd7d07;hb=d7dcea0e5a8df0f479e99f168a10b9a9535c7ad6;hp=f37be220143bf733de348935264c347af3e09967;hpb=45ff232a1db704623e0c4baed011d12cbd44b06e;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vterm.c b/KernelLand/Kernel/drv/vterm.c index f37be220..21755705 100644 --- a/KernelLand/Kernel/drv/vterm.c +++ b/KernelLand/Kernel/drv/vterm.c @@ -5,7 +5,7 @@ * drv/vterm.c * - Virtual Terminal - Initialisation and VFS Interface */ -#define DEBUG 1 +#define DEBUG 0 #include "vterm.h" #include #include @@ -20,7 +20,6 @@ #define NUM_VTS 8 //#define DEFAULT_OUTPUT "BochsGA" #define DEFAULT_OUTPUT "Vesa" -#define FALLBACK_OUTPUT "x86_VGAText" #define DEFAULT_INPUT "Keyboard" #define DEFAULT_WIDTH 640 #define DEFAULT_HEIGHT 480 @@ -35,7 +34,6 @@ extern void Debug_SetKTerminal(const char *File); // === PROTOTYPES === int VT_Install(char **Arguments); int VT_Root_IOCtl(tVFS_Node *Node, int Id, void *Data); -void VT_int_PutFBData(tVTerm *Term, size_t Offset, size_t Length, const void *Data); void VT_PTYOutput(void *Handle, size_t Length, const void *Data); int VT_PTYResize(void *Handle, const struct ptydims *Dims); int VT_PTYModeset(void *Handle, const struct ptymode *Mode); @@ -126,9 +124,9 @@ int VT_Install(char **Arguments) // Apply Defaults if(!gsVT_OutputDevice) gsVT_OutputDevice = (char*)DEFAULT_OUTPUT; else if( Module_EnsureLoaded( gsVT_OutputDevice ) ) gsVT_OutputDevice = (char*)DEFAULT_OUTPUT; - if( Module_EnsureLoaded( gsVT_OutputDevice ) ) gsVT_OutputDevice = (char*)FALLBACK_OUTPUT; + //if( Module_EnsureLoaded( gsVT_OutputDevice ) ) gsVT_OutputDevice = (char*)FALLBACK_OUTPUT; if( Module_EnsureLoaded( gsVT_OutputDevice ) ) { - Log_Error("VTerm", "Fallback video '%s' is not avaliable, giving up", FALLBACK_OUTPUT); + Log_Error("VTerm", "Video device '%s' is not avaliable, giving up", gsVT_OutputDevice); return MODULE_ERR_MISC; } @@ -163,32 +161,26 @@ int VT_Install(char **Arguments) Log_Debug("VTerm", "Initialising nodes (and creating buffers)"); for( i = 0; i < NUM_VTS; i++ ) { - gVT_Terminals[i].Mode = TERM_MODE_TEXT; - gVT_Terminals[i].Flags = 0; // gVT_Terminals[i].Flags = VT_FLAG_HIDECSR; //HACK - Stop all those memcpy calls gVT_Terminals[i].CurColour = DEFAULT_COLOUR; - gVT_Terminals[i].WritePos = 0; - gVT_Terminals[i].AltWritePos = 0; - gVT_Terminals[i].ViewPos = 0; - gVT_Terminals[i].ScrollHeight = 0; + gVT_Terminals[i].Mode = PTYBUFFMT_TEXT; // Initialise VT_int_Resize( &gVT_Terminals[i], giVT_RealWidth, giVT_RealHeight ); - gVT_Terminals[i].Mode = PTYBUFFMT_TEXT; char name[] = {'v','t','0'+i,'\0'}; - gVT_Terminals[i].PTY = PTY_Create(name, &gVT_Terminals[i], - VT_PTYOutput, VT_PTYResize, VT_PTYModeset); - struct ptymode mode = { - .OutputMode = PTYBUFFMT_TEXT, - .InputMode = PTYIMODE_CANON|PTYIMODE_ECHO - }; struct ptydims dims = { .W = giVT_RealWidth / giVT_CharWidth, .H = giVT_RealHeight / giVT_CharHeight, .PW = giVT_RealWidth, .PH = giVT_RealHeight }; - PTY_SetAttrib(gVT_Terminals[i].PTY, &dims, &mode, 0); + struct ptymode mode = { + .OutputMode = PTYBUFFMT_TEXT, + .InputMode = PTYIMODE_CANON|PTYIMODE_ECHO + }; + gVT_Terminals[i].PTY = PTY_Create(name, &gVT_Terminals[i], + VT_PTYOutput, VT_PTYResize, VT_PTYModeset, + &dims, &mode); } // Add to DevFS @@ -376,15 +368,16 @@ void VT_PTYOutput(void *Handle, size_t Length, const void *Data) VT_int_PutString(term, Data, Length); break; case PTYBUFFMT_FB: - // TODO: How do offset? + // TODO: How can the offset be done cleanly? (Ask the PTY for its offset?) + Warning("TODO: Offsets for VT_PTYOutput FBData"); VT_int_PutFBData(term, 0, Length, Data); break; case PTYBUFFMT_2DCMD: - // TODO: Impliment 2D commands VT_int_Handle2DCmd(term, Length, Data); break; case PTYBUFFMT_3DCMD: - // TODO: Impliment 3D commands + // TODO: Implement 3D commands + Warning("TODO: VTerm 3D commands"); break; } }