#define DEFAULT_INPUT "Keyboard"
#define DEFAULT_WIDTH 640
#define DEFAULT_HEIGHT 480
-#define DEFAULT_SCROLLBACK 2 // 2 Screens of text + current screen
+#define DEFAULT_SCROLLBACK 4 // 2 Screens of text + current screen
//#define DEFAULT_SCROLLBACK 0
// === TYPES ===
size_t VT_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer);
size_t VT_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer);
int VT_Terminal_IOCtl(tVFS_Node *Node, int Id, void *Data);
+void VT_Terminal_Reference(tVFS_Node *Node);
+void VT_Terminal_Close(tVFS_Node *Node);
+//void VT_SetTerminal(int Term);
// === CONSTANTS ===
VT_InitOutput();
VT_InitInput();
+
// Create Nodes
+ Log_Debug("VTerm", "Initialising nodes (and creating buffers)");
for( i = 0; i < NUM_VTS; i++ )
{
gVT_Terminals[i].Mode = TERM_MODE_TEXT;
// Semaphore_Init(&gVT_Terminals[i].InputSemaphore, 0, MAX_INPUT_CHARS8, "VTerm", gVT_Terminals[i].Name);
}
+ Log_Debug("VTerm", "Registering with DevFS");
// Add to DevFS
DevFS_AddDevice( &gVT_DrvInfo );
// Set kernel output to VT0
+ Log_Debug("VTerm", "Setting kernel output to VT#0");
Debug_SetKTerminal("/Devices/VTerm/0");
return MODULE_ERR_OK;
return -1;
}
+void VT_Terminal_Reference(tVFS_Node *Node)
+{
+ // Append PID to list
+}
+
+void VT_Terminal_Close(tVFS_Node *Node)
+{
+ // Remove PID from list
+}
+
/**
* \fn void VT_SetTerminal(int ID)
* \brief Set the current terminal
giVT_CurrentTerminal = ID;
gpVT_CurTerm = &gVT_Terminals[ID];
+ LOG("Attempting VT_SetMode");
+
if( gpVT_CurTerm->Mode == TERM_MODE_TEXT )
{
VT_SetMode( VIDEO_BUFFMT_TEXT );
VFS_IOCtl(giVT_OutputDevHandle, VIDEO_IOCTL_SETCURSORBITMAP, gpVT_CurTerm->VideoCursor);
VT_SetMode( VIDEO_BUFFMT_FRAMEBUFFER );
}
-
+
+ LOG("Mode set");
+
if(gpVT_CurTerm->Buffer)
{
// TODO: Handle non equal sized
gpVT_CurTerm->Width*gpVT_CurTerm->Height*sizeof(Uint32),
gpVT_CurTerm->Buffer
);
+ LOG("Updated screen contents");
}
VT_int_UpdateCursor(gpVT_CurTerm, 1);
// Update the screen
VT_int_UpdateScreen(gpVT_CurTerm, 1);
+ LOG("done");
}