From b380dd49c1c867ec93bb42a08a4a2fdf72212ac9 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sun, 16 Dec 2012 02:06:29 +0100 Subject: [PATCH] Add useful functions to API. --- sortix/include/sortix/kernel/video.h | 4 +++ sortix/video.cpp | 41 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/sortix/include/sortix/kernel/video.h b/sortix/include/sortix/kernel/video.h index 1e4ee6fb..8f4e9c2c 100644 --- a/sortix/include/sortix/kernel/video.h +++ b/sortix/include/sortix/kernel/video.h @@ -54,6 +54,10 @@ namespace Video { void Init(TextBufferHandle* textbufhandle); bool RegisterDriver(const char* name, VideoDriver* driver); char* GetCurrentMode(); +char* GetDriverName(size_t index); +size_t GetCurrentDriverIndex(); +size_t GetNumDrivers(); +size_t LookupDriverIndexOfMode(const char* mode); bool Supports(const char* mode); bool SwitchMode(const char* mode); char** GetModes(size_t* modesnum); diff --git a/sortix/video.cpp b/sortix/video.cpp index 1d10c5c2..a46c84a3 100644 --- a/sortix/video.cpp +++ b/sortix/video.cpp @@ -120,6 +120,26 @@ void Init(TextBufferHandle* thetextbufhandle) currentmode = NULL; } +size_t GetCurrentDriverIndex() +{ + ScopedLock lock(&videolock); + return currentdrvid; +} + +size_t GetNumDrivers() +{ + ScopedLock lock(&videolock); + return numdrivers; +} + +char* GetDriverName(size_t index) +{ + ScopedLock lock(&videolock); + if ( numdrivers <= index || !drivers[index].name ) + return String::Clone("none"); + return String::Clone(drivers[index].name); +} + static DriverEntry* CurrentDriverEntry() { if ( currentdrvid == SIZE_MAX ) { return NULL; } @@ -413,6 +433,27 @@ bool Supports(const char* mode) return drvent->driver->Supports(mode); } +size_t LookupDriverIndexOfMode(const char* mode) +{ + const char* needle = "driver="; + size_t needlelen = strlen(needle); + while ( *mode ) + { + if ( !strncmp(mode, needle, needlelen) ) + { + const char* name = mode + needlelen; + size_t namelen = strcspn(name, ","); + ScopedLock lock(&videolock); + for ( size_t i = 0; i < numdrivers; i++ ) + if ( !strncmp(drivers[i].name, name, namelen) ) + return i; + return SIZE_MAX; + } + mode += strcspn(mode, ",") + 1; + } + return SIZE_MAX; +} + off_t FrameSize() { ScopedLock lock(&videolock);