diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-12-21 21:59:13 +0100 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-12-21 21:59:45 +0100 |
| commit | 610f91d87152cbe48d3054fcf437d8239da6ef35 (patch) | |
| tree | a386f7047ab73d088169ab2371ddc6ffe8020f1c /dev/Kernel/src/KernelMain.cc | |
| parent | 509fcca5986651c8ba712fb395f8498f2dea4109 (diff) | |
IMP: :boom: Breaking changes some checks are needed to be done.
Signed-off-by: Amlal <amlalelmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/src/KernelMain.cc')
| -rw-r--r-- | dev/Kernel/src/KernelMain.cc | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc new file mode 100644 index 00000000..6907deea --- /dev/null +++ b/dev/Kernel/src/KernelMain.cc @@ -0,0 +1,126 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + + File: Main.cxx + Purpose: Main entrypoint of kernel. + +------------------------------------------- */ + +#include <KernelKit/PE.h> +#include <ArchKit/ArchKit.h> +#include <CompilerKit/Detail.h> +#include <FirmwareKit/Handover.h> +#include <KernelKit/FileMgr.h> +#include <KernelKit/Heap.h> +#include <KernelKit/PEF.h> +#include <KernelKit/PEFCodeMgr.h> +#include <KernelKit/UserProcessScheduler.h> +#include <KernelKit/Heap.h> +#include <NewKit/Json.h> +#include <NewKit/KString.h> +#include <NewKit/Utils.h> +#include <KernelKit/CodeMgr.h> +#include <CFKit/Property.h> +#include <Modules/FB/KWindow.h> +#include <KernelKit/Timer.h> + +STATIC CG::ML_WINDOW_STRUCT* kKernelWnd = nullptr; + +namespace Kernel::Detail +{ + /// @brief Filesystem auto formatter, additional checks are also done by the class. + class FilesystemInstaller final + { + Kernel::NeFileSystemMgr* fNeFS{nullptr}; + + public: + /// @brief wizard constructor. + FilesystemInstaller() + { + fNeFS = (Kernel::NeFileSystemMgr*)Kernel::IFilesystemMgr::GetMounted(); + + if (fNeFS && fNeFS->GetParser()) + { + constexpr auto kFolderInfo = "META-XML"; + const auto kFolderCount = 7; + const char* kFolderStr[kFolderCount] = { + "/Boot/", "/System/", "/Support/", "/Applications/", + "/Users/", "/Library/", "/Mount/"}; + + for (Kernel::SizeT dir_index = 0UL; dir_index < kFolderCount; ++dir_index) + { + auto catalog_folder = fNeFS->GetParser()->GetCatalog(kFolderStr[dir_index]); + + if (catalog_folder) + { + delete catalog_folder; + catalog_folder = nullptr; + + continue; + } + + catalog_folder = fNeFS->GetParser()->CreateCatalog(kFolderStr[dir_index], 0, + kNeFSCatalogKindDir); + + NFS_FORK_STRUCT fork_folder{0}; + + Kernel::rt_copy_memory((Kernel::VoidPtr)(kFolderInfo), fork_folder.ForkName, + Kernel::rt_string_len(kFolderInfo)); + + Kernel::rt_copy_memory((Kernel::VoidPtr)(catalog_folder->Name), + fork_folder.CatalogName, + Kernel::rt_string_len(catalog_folder->Name)); + + fork_folder.DataSize = kNeFSForkSize; + fork_folder.ResourceId = 0; + fork_folder.ResourceKind = Kernel::kNeFSRsrcForkKind; + fork_folder.Kind = Kernel::kNeFSDataForkKind; + + Kernel::KString folder_metadata(2048); + + folder_metadata += + "<!properties/>\r<p>Kind: folder</p>\r<p>Created by: system</p>\r<p>Edited by: " + "system</p>\r<p>Volume Type: Zeta</p>\r"; + + folder_metadata += "<p>Path: "; + folder_metadata += kFolderStr[dir_index]; + folder_metadata += "</p>\r"; + + const Kernel::SizeT kMetaDataSz = kNeFSSectorSz; + + fNeFS->GetParser()->CreateFork(catalog_folder, fork_folder); + + fNeFS->GetParser()->WriteCatalog( + catalog_folder, true, (Kernel::VoidPtr)(folder_metadata.CData()), + kMetaDataSz, kFolderInfo); + + delete catalog_folder; + catalog_folder = nullptr; + } + } + } + + ~FilesystemInstaller() = default; + + ZKA_COPY_DEFAULT(FilesystemInstaller); + + /// @brief Grab the disk's NewFS reference. + /// @return NeFileSystemMgr the filesystem interface + Kernel::NeFileSystemMgr* Leak() + { + return fNeFS; + } + }; +} // namespace Kernel::Detail + +/// @brief Application entrypoint. +/// @param Void +/// @return Void +EXTERN_C Kernel::Void rtl_kernel_main(Kernel::SizeT argc, char** argv, char** envp, Kernel::SizeT envp_len) +{ + Kernel::IFilesystemMgr::Mount(new Kernel::NeFileSystemMgr()); + Kernel::Detail::FilesystemInstaller installer; + + +} |
