Files
MontaukOS/kernel/src/Api/Terminal.hpp
T

48 lines
1.3 KiB
C++

/*
* Terminal.hpp
* SYS_PRINT, SYS_PUTCHAR syscalls
* Copyright (c) 2026 Daniel Hammer
*/
#pragma once
#include <Sched/Scheduler.hpp>
#include <Terminal/Terminal.hpp>
#include "Common.hpp"
namespace montauk::abi {
static void Sys_Print(const char* text) {
auto* proc = Sched::GetCurrentProcessPtr();
if (proc && proc->redirected) {
Ipc::Stream* stream = GetRedirOutStream(proc);
if (stream != nullptr) {
int len = 0;
while (text[len]) len++;
if (len > 0) {
WriteAllToStream(stream, (const uint8_t*)text, len);
}
return;
}
}
// Don't draw over the framebuffer once the GUI is active
if (Kt::g_suppressKernelLog) return;
Kt::Print(text);
}
static void Sys_Putchar(char c) {
auto* proc = Sched::GetCurrentProcessPtr();
if (proc && proc->redirected) {
Ipc::Stream* stream = GetRedirOutStream(proc);
if (stream != nullptr) {
uint8_t byte = (uint8_t)c;
WriteAllToStream(stream, &byte, 1);
return;
}
}
// Don't draw over the framebuffer once the GUI is active
if (Kt::g_suppressKernelLog) return;
Kt::Putchar(c);
}
};