aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/tbi/screen.c35
-rw-r--r--lib/tbi/screen.h30
2 files changed, 65 insertions, 0 deletions
diff --git a/lib/tbi/screen.c b/lib/tbi/screen.c
new file mode 100644
index 0000000..7eb9ac2
--- /dev/null
+++ b/lib/tbi/screen.c
@@ -0,0 +1,35 @@
+#include <Uefi.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include "screen.h"
+
+struct screen *prepare_screen(VOID)
+{
+ struct screen *scr;
+ scr = AllocateZeroPool(sizeof(struct screen));
+ if(!scr)
+ return NULL;
+
+ scr->stdin = gST->ConIn;
+ scr->stdout = gST->ConOut;
+ scr->stderr = gST->StdErr;
+
+ gST->ConOut->QueryMode(
+ gST->ConOut,
+ gST->ConOut->Mode->Mode,
+ &(scr->columns),
+ &(scr->lines)
+ );
+
+ return scr;
+}
+
+VOID forget_screen(struct screen *scr)
+{
+ ASSERT(scr != NULL);
+
+ FreePool(scr);
+}
diff --git a/lib/tbi/screen.h b/lib/tbi/screen.h
new file mode 100644
index 0000000..ae25640
--- /dev/null
+++ b/lib/tbi/screen.h
@@ -0,0 +1,30 @@
+#ifndef UFM_TBI_SCREEN_H
+#define UFM_TBI_SCREEN_H
+
+#include <Uefi.h>
+
+struct screen
+{
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL *stdin;
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *stdout;
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *stderr;
+ UINTN columns, lines; // current screen size
+};
+
+/*
+ * Prepares a structure with information about screen
+ *
+ * return: A pointer to the allocated structure or NULL if allocation fails
+*/
+struct screen *prepare_screen(VOID);
+
+/*
+ * Frees the structure of the screen
+ *
+ * scr: the screen on which to operate
+ *
+ * return: VOID
+*/
+VOID forget_screen(struct screen *scr);
+
+#endif /* UFM_TBI_SCREEN_H */