diff --git a/kernel/include/fs/devices/Console.h b/kernel/include/fs/devices/Console.h new file mode 100644 index 00000000..5474e797 --- /dev/null +++ b/kernel/include/fs/devices/Console.h @@ -0,0 +1,9 @@ +#pragma once +#include "fs/VFS.h" + +namespace ConsoleDevice +{ + VFS::Node* create_new(); + + ssize_t write(VFS::Node* node, size_t offset, size_t size, const char* buffer); +} \ No newline at end of file diff --git a/kernel/src/fs/devices/Console.cpp b/kernel/src/fs/devices/Console.cpp new file mode 100644 index 00000000..60bbd4d4 --- /dev/null +++ b/kernel/src/fs/devices/Console.cpp @@ -0,0 +1,25 @@ +#include "fs/devices/Console.h" +#include "config.h" +#include "render/TextRenderer.h" +#include "std/stdio.h" +#include "std/stdlib.h" +#include "std/string.h" + +VFS::Node* ConsoleDevice::create_new() +{ + VFS::Node* dev = new VFS::Node; + dev->write_func = ConsoleDevice::write; + dev->inode = 0; + dev->length = 0; + dev->type = VFS_FILE; + dev->flags = 0; + strncpy(dev->name, "console", sizeof(dev->name)); + return dev; +} + +ssize_t ConsoleDevice::write(VFS::Node* node, size_t, size_t size, const char* buffer) +{ + if (!node) return -1; + TextRenderer::write(buffer, size); + return (ssize_t)size; +} \ No newline at end of file diff --git a/kernel/src/fs/devices/DeviceFS.cpp b/kernel/src/fs/devices/DeviceFS.cpp index 387c9eef..4bc698a4 100644 --- a/kernel/src/fs/devices/DeviceFS.cpp +++ b/kernel/src/fs/devices/DeviceFS.cpp @@ -1,4 +1,5 @@ #include "fs/devices/DeviceFS.h" +#include "fs/devices/Console.h" #include "fs/devices/Version.h" #include "std/stdlib.h" #include "std/string.h" @@ -21,6 +22,7 @@ VFS::Node* DeviceFS::get() strncpy(devfs_root->name, "dev", sizeof(devfs_root->name)); devfs_files[devfs_file_count++] = VersionDevice::create_new(); + devfs_files[devfs_file_count++] = ConsoleDevice::create_new(); return devfs_root; }