From dd192787a70a973f2474720aea49af3f6ddabb7a Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 26 Jan 2024 19:17:00 +0100 Subject: h-core: Breaking kernel changes, IDevice becomes DeviceInterface, the UPT is Read Only by default. DebugManager allocates space for users by default (for a debug message) Update PEF enum kPefArch. Move Seeker into the /Services directory. Complete merge of SupportKit to KernelKit. Signed-off-by: Amlal El Mahrouss --- HALKit/AMD64/DebugManager.asm | 5 +- KernelKit/CodeManager.hpp | 11 +- KernelKit/DebugOutput.hpp | 4 +- KernelKit/Device.hpp | 20 ++-- KernelKit/DriveManager.hpp | 2 +- KernelKit/PEF.hpp | 2 +- KernelKit/SharedObjectCore.hxx | 6 +- NetworkKit/NetworkDevice.hpp | 2 +- NewKit/Macros.hpp | 2 +- Seeker/Seeker.hxx | 171 ------------------------------- Seeker/SeekerAbout.cxx | 16 --- Seeker/SeekerAssert.cxx | 20 ---- Seeker/SeekerDriver.cxx | 27 ----- Seeker/SeekerFileWnd.cxx | 54 ---------- Seeker/SeekerSubsystemStart.cxx | 30 ------ Services/.gitkeep | 0 Services/Seeker/Seeker.hxx | 171 +++++++++++++++++++++++++++++++ Services/Seeker/SeekerAbout.cxx | 16 +++ Services/Seeker/SeekerAssert.cxx | 20 ++++ Services/Seeker/SeekerDriver.cxx | 27 +++++ Services/Seeker/SeekerFileWnd.cxx | 54 ++++++++++ Services/Seeker/SeekerSubsystemStart.cxx | 30 ++++++ Source/CodeManager.cxx | 8 +- Source/KMain.cxx | 2 +- Source/Network/NetworkDevice.cpp | 2 +- StorageKit/NVME.hpp | 4 +- newBoot/Source/Start.cxx | 8 +- newBoot/Source/makefile | 12 +-- 28 files changed, 360 insertions(+), 366 deletions(-) delete mode 100644 Seeker/Seeker.hxx delete mode 100644 Seeker/SeekerAbout.cxx delete mode 100644 Seeker/SeekerAssert.cxx delete mode 100644 Seeker/SeekerDriver.cxx delete mode 100644 Seeker/SeekerFileWnd.cxx delete mode 100644 Seeker/SeekerSubsystemStart.cxx create mode 100644 Services/.gitkeep create mode 100644 Services/Seeker/Seeker.hxx create mode 100644 Services/Seeker/SeekerAbout.cxx create mode 100644 Services/Seeker/SeekerAssert.cxx create mode 100644 Services/Seeker/SeekerDriver.cxx create mode 100644 Services/Seeker/SeekerFileWnd.cxx create mode 100644 Services/Seeker/SeekerSubsystemStart.cxx diff --git a/HALKit/AMD64/DebugManager.asm b/HALKit/AMD64/DebugManager.asm index 5b9c3cc6..6c0bf149 100644 --- a/HALKit/AMD64/DebugManager.asm +++ b/HALKit/AMD64/DebugManager.asm @@ -15,10 +15,11 @@ __rt_debug_record_table: db "DebugMgr/hCore", 0xa, 0xd, 0 - resb 16 - dw 0x5566 + ;; User Data goes there + resb 64 __rt_debug_int_3: push 0x6677 ;; Debug check error +;; then halt and goes back to L0, thens halts... L0: hlt jmp $ diff --git a/KernelKit/CodeManager.hpp b/KernelKit/CodeManager.hpp index fdf80e91..04d5647b 100644 --- a/KernelKit/CodeManager.hpp +++ b/KernelKit/CodeManager.hpp @@ -56,16 +56,15 @@ namespace hCore namespace Utils { /// \brief Much like Mac OS's UPP. + /// This is read-only by design. /// It handles different kind of code. /// PowerPC <-> AMD64 for example. typedef struct UniversalProcedureTable { - public: - Char symbolName[kPefNameLen]; - VoidPtr symbolPtr; - SizeT symbolArchitecture; - - } UniversalProcedureTableType; + const Char NAME[kPefNameLen]; + const VoidPtr TRAP; + const SizeT ARCH; + } __attribute__((packed)) UniversalProcedureTableType; bool execute_from_image(PEFLoader& exec); } diff --git a/KernelKit/DebugOutput.hpp b/KernelKit/DebugOutput.hpp index 3bfb0144..1e30e6a4 100644 --- a/KernelKit/DebugOutput.hpp +++ b/KernelKit/DebugOutput.hpp @@ -16,10 +16,10 @@ namespace hCore { // @brief Emulates a VT100 terminal. - class TerminalDevice final : public IDevice + class TerminalDevice final : public DeviceInterface { public: - TerminalDevice(void (*print)(const char *), void (*get)(const char *)) : IDevice(print, get) {} + TerminalDevice(void (*print)(const char *), void (*get)(const char *)) : DeviceInterface(print, get) {} virtual ~TerminalDevice() {} /// @brief returns device name (terminal name) diff --git a/KernelKit/Device.hpp b/KernelKit/Device.hpp index e407f4e9..b117cf7f 100644 --- a/KernelKit/Device.hpp +++ b/KernelKit/Device.hpp @@ -19,37 +19,37 @@ namespace hCore { template - class IDevice; + class DeviceInterface; template - class IDevice + class DeviceInterface { public: - IDevice(void (*Out)(T), void (*In)(T)) + explicit DeviceInterface(void (*Out)(T), void (*In)(T)) : m_Out(Out), m_In(In) {} - virtual ~IDevice() = default; + virtual ~DeviceInterface() = default; public: - IDevice &operator=(const IDevice &) = default; - IDevice(const IDevice &) = default; + DeviceInterface &operator=(const DeviceInterface &) = default; + DeviceInterface(const DeviceInterface &) = default; public: - IDevice &operator<<(T Data) + DeviceInterface &operator<<(T Data) { m_Out(Data); return *this; } - IDevice &operator>>(T Data) + DeviceInterface &operator>>(T Data) { m_In(Data); return *this; } - virtual const char *Name() const + virtual const char* Name() const { - return ("IDevice"); + return ("DeviceInterface"); } operator bool() { return m_Out && m_In; } diff --git a/KernelKit/DriveManager.hpp b/KernelKit/DriveManager.hpp index bb4e453c..9951c9cf 100644 --- a/KernelKit/DriveManager.hpp +++ b/KernelKit/DriveManager.hpp @@ -64,7 +64,7 @@ namespace hCore #define kPacketZip "file/x-zip" //! drive as a device. - typedef IDevice Drive; + typedef DeviceInterface Drive; typedef Drive* DrivePtr; class DriveSelector final diff --git a/KernelKit/PEF.hpp b/KernelKit/PEF.hpp index 40c9f8a0..a2f5c5b8 100644 --- a/KernelKit/PEF.hpp +++ b/KernelKit/PEF.hpp @@ -32,7 +32,7 @@ namespace hCore kPefArchAMD64, kPefArchRISCV, kPefArch64x0, /* 64x000. */ - kPefArchPOWER, + kPefArch32x0, kPefArchInvalid = 0xFF, }; diff --git a/KernelKit/SharedObjectCore.hxx b/KernelKit/SharedObjectCore.hxx index f648fdc0..94b0ead2 100644 --- a/KernelKit/SharedObjectCore.hxx +++ b/KernelKit/SharedObjectCore.hxx @@ -7,8 +7,8 @@ * ======================================================== */ -#ifndef __SUPPORTKIT_SHARED_OBJECT_CORE_HXX__ -#define __SUPPORTKIT_SHARED_OBJECT_CORE_HXX__ +#ifndef __KERNELKIT_SHARED_OBJECT_CORE_HXX__ +#define __KERNELKIT_SHARED_OBJECT_CORE_HXX__ #include #include @@ -54,4 +54,4 @@ namespace hCore } } -#endif /* ifndef __SUPPORTKIT_SHARED_OBJECT_CORE_HXX__ */ +#endif /* ifndef __KERNELKIT_SHARED_OBJECT_CORE_HXX__ */ diff --git a/NetworkKit/NetworkDevice.hpp b/NetworkKit/NetworkDevice.hpp index fd6b1d2b..ce4361a9 100644 --- a/NetworkKit/NetworkDevice.hpp +++ b/NetworkKit/NetworkDevice.hpp @@ -17,7 +17,7 @@ namespace hCore { struct NetworkDeviceCommand; - class NetworkDevice final : public IDevice + class NetworkDevice final : public DeviceInterface { public: NetworkDevice(void(*out)(NetworkDeviceCommand), void(*in)(NetworkDeviceCommand), diff --git a/NewKit/Macros.hpp b/NewKit/Macros.hpp index 7259f1a7..8972e7b5 100644 --- a/NewKit/Macros.hpp +++ b/NewKit/Macros.hpp @@ -38,7 +38,7 @@ #endif // #ifndef ATTRIBUTE #ifndef __hCore__ -#define __hCore__ (20230208) +#define __hCore__ (202401) #endif // !__hCore__ #ifndef EXTERN_C diff --git a/Seeker/Seeker.hxx b/Seeker/Seeker.hxx deleted file mode 100644 index 0670c128..00000000 --- a/Seeker/Seeker.hxx +++ /dev/null @@ -1,171 +0,0 @@ -/* - * ======================================================== - * - * hCore - * Copyright 2024 Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#ifndef __SEEKER__ -#define __SEEKER__ - -#include - -/* @brief Seeker SDK. */ -/* Seeker helps with GUI developement. */ - -enum -{ - kRegularFile, - kDirectory, - kJunctionFile, - kNetworkFile, - kNetworkDirectory, - kNetworkJunction, - kDrive, - kDevice, -}; - -enum -{ - kHardDrv = 110, - kOpticalDrv = 111, - kUsbDrv = 112, -}; - -enum -{ - kLangUs = 113, - kLangUk = 114, - kLangFr = 115, - kLangNl = 116, -}; - -#define kResourceExt ".rsc" -#define kExecutableExt ".exe" -#define kLibExt ".lib" -#define kShLibExt ".dlib" - -typedef void Void; -typedef void* VoidPtr; - -typedef wchar_t WideChar; -typedef wchar_t* WideCString; - -typedef __SIZE_TYPE__ SizeT; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -struct SeekerProtocol; - -// @brief Opens a Seeker window. -extern "C" VoidPtr SeekerOpenExplorer(const WideCString startCategory); - -// @brief Closes a Seeker window. -extern "C" Void SeekerCloseExplorer(VoidPtr handle); - -// @brief Make Seeker connect to endpoint. -extern "C" Void SeekerExplorerConnectToNetwork(VoidPtr handle, - const WideCString endpoint, - struct SeekerProtocol* proto); - -extern "C" Void SeekerExplorerChangeTo(VoidPtr handle, - const WideCString nodeName); - -// @brief Search for elements inside directory/drive -// returns a class list as voidstar. -extern "C" VoidPtr SeekerSearch(VoidPtr handle, - const WideCString where, - const WideCString forWhat); - -#define kProtocolStrLen 8 - -// @brief Seeker Location Protocol. -// @brief takes a handler class to handle server response. -struct SeekerProtocol -{ - WideChar fProtocol[kProtocolStrLen]; // ftp, sftp, http - VoidPtr fProtocolHandlerClass; - SizeT fProtocolHandlerClassSize; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -typedef void(*WndProcType)(int msg, VoidPtr lparam, VoidPtr wparam); - -extern "C" bool WindowClassCreate(const WideCString name, VoidPtr windowStruct, SizeT windowStructSz); -extern "C" VoidPtr WindowCreate(const WideCString name, const WideCString wndClass, VoidPtr parent); -extern "C" Void WindowFieldSet(const VoidPtr win, const WideCString key, const WideCString value); -extern "C" Void WindowFree(VoidPtr win); -extern "C" Void WindowProcSet(VoidPtr win, void(*winproc)(int msg, VoidPtr lparam, VoidPtr wparam)); -extern "C" Void WindowFreeClass(VoidPtr classPtr); - -// passing nullptr will give a console to the desktop. -extern "C" Void OpenConsole(VoidPtr handle); -extern "C" Void CloseConsole(VoidPtr handle); - -// Runtime functions -extern "C" void RtInitTerm(void); -extern "C" bool RtIsValidHeapPtr(VoidPtr heap); -extern "C" Void RtDialogAssert(const bool expr, const wchar_t* file, const wchar_t* expression); -extern "C" Void RtShellOpen(const WideCString path, int argc, const WideCString* argv); - -#define __WideExpr(x) L##x -#define RtWideString(x) __WideExpr(x) - -#define RtAssert(expr) RtDialogAssert(expr, RtWideString(__FILE__), RtWideString(#expr)) - -typedef VoidPtr HandlePtr; -typedef HandlePtr IdPtr; - -///////////////////////////////////////////////////// - -HandlePtr SeekerAboutDlg(Void); - -#define FINDER_YES L"Yes" -#define FINDER_NO L"No" - -#define kAssertInterrupt "sc $1" - -extern "C" Void QuickDrawRect(float x, float y, - float r, float g, float b, - float w, float h, float strike, - float radius); - -extern "C" Void QuickDrawPattern(float x, float y, - float* pattern, size_t sz, - float w, float h, float strike, - float radius); - -// @brief a C++ class. -typedef VoidPtr SeekerClassPtr; - -typedef struct -{ - float x, y; - float w, h; -} TAreaType; - -///////////////////////////////////////////////////// - -namespace Seeker -{ - class TControl - { - public: - explicit TControl() = default; - virtual ~TControl() = default; - - HCORE_COPY_DEFAULT(TControl); - - public: - virtual void Draw() noexcept = 0; - - public: - TAreaType fVisibleArea; - TAreaType fFullArea; - - }; -} -#endif /* ifndef __SEEKER__ */ \ No newline at end of file diff --git a/Seeker/SeekerAbout.cxx b/Seeker/SeekerAbout.cxx deleted file mode 100644 index 41046e35..00000000 --- a/Seeker/SeekerAbout.cxx +++ /dev/null @@ -1,16 +0,0 @@ -/* - * ======================================================== - * - * hCore - * Copyright 2024 Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include - -HandlePtr SeekerAboutDlg(Void) -{ - HandlePtr windowHandle = WindowCreate(L"hCore", L"OSAboutDialog", nullptr); - return windowHandle; -} \ No newline at end of file diff --git a/Seeker/SeekerAssert.cxx b/Seeker/SeekerAssert.cxx deleted file mode 100644 index 0566b457..00000000 --- a/Seeker/SeekerAssert.cxx +++ /dev/null @@ -1,20 +0,0 @@ -/* - * ======================================================== - * - * hCore - * Copyright 2024 Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include - -extern "C" Void RtDialogAssert(const bool expr, const wchar_t* file, const wchar_t* expression) -{ - auto handle = WindowCreate(L"Assertion failed!", L"OSWndAssert", nullptr); - - WindowFieldSet(handle, L"Title", L"Assertion failed!"); - WindowFieldSet(handle, L"ButtonClicked_OK", L"Abort"); - - asm (kAssertInterrupt); -} \ No newline at end of file diff --git a/Seeker/SeekerDriver.cxx b/Seeker/SeekerDriver.cxx deleted file mode 100644 index 6a6008d7..00000000 --- a/Seeker/SeekerDriver.cxx +++ /dev/null @@ -1,27 +0,0 @@ -/* - * ======================================================== - * - * hCore - * Copyright 2024 Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include - -extern "C" Void DrawDesktopService(Void); -extern "C" Void DrawWindowService(Void); -extern "C" Void DrawMenuService(Void); -extern "C" Void DrawDialogService(Void); - -extern "C" Void PumpMessageService(Void); - -// @brief each app must call this for their region, otherwise it'll show a black rectangle. -extern "C" Void SeekerMessageLoop(Void) -{ - DrawDesktopService(); - DrawMenuService(); - DrawWindowService(); - DrawDialogService(); - PumpMessageService(); -} diff --git a/Seeker/SeekerFileWnd.cxx b/Seeker/SeekerFileWnd.cxx deleted file mode 100644 index b2636cc6..00000000 --- a/Seeker/SeekerFileWnd.cxx +++ /dev/null @@ -1,54 +0,0 @@ -/* - * ======================================================== - * - * hCore - * Copyright 2024 Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include - -// Source code of the Seeker Window. - -// @brief Opens a Seeker window. -extern "C" VoidPtr SeekerOpenExplorer(const WideCString startCategory) -{ - auto win = WindowCreate(L"Seeker", L"OSSeekerWnd", nullptr); - - if (win) - { - WindowFieldSet(win, L"Category", startCategory); - WindowFieldSet(win, L"CanClose", FINDER_NO); - WindowFieldSet(win, L"ClosePolicy", L"Restart"); - - return win; - } - - RtAssert(win != nullptr); - - return nullptr; -} - -// @brief Closes a Seeker window. -extern "C" Void SeekerCloseExplorer(VoidPtr handle) -{ - if (RtIsValidHeapPtr(handle)) - { - WindowFree(handle); - } -} - -extern "C" Void SeekerExplorerConnectToNetwork(VoidPtr handle, - const WideCString endpoint, - struct SeekerProtocol* proto) -{ - if (handle) - { - WindowFieldSet(handle, L"NetworkProtocolEndpoint", endpoint); - WindowFieldSet(handle, L"NetworkProtocolClass", (wchar_t*)proto->fProtocolHandlerClass); - WindowFieldSet(handle, L"NetworkProtocolClassSize", (wchar_t*)proto->fProtocolHandlerClassSize); - - WindowFieldSet(handle, L"NetworkProtocolFire", FINDER_YES); - } -} \ No newline at end of file diff --git a/Seeker/SeekerSubsystemStart.cxx b/Seeker/SeekerSubsystemStart.cxx deleted file mode 100644 index 905a7345..00000000 --- a/Seeker/SeekerSubsystemStart.cxx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * ======================================================== - * - * hCore - * Copyright 2024 Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#include - -extern "C" Void __InitCxxGlobals(Void); -extern "C" Void __InitCommonCtrls(Void); -extern "C" Void __InitSeekerCtrls(Void); -extern "C" char** __InitArgs(int* argc); - -extern "C" Void __InvokeMain(int argc, char** argv); - -/* @brief As requested by PEF. */ -extern "C" Void __start(Void) -{ - __InitCxxGlobals(); - __InitSeekerCtrls(); - __InitCommonCtrls(); - - int argc = 0; - auto argv = __InitArgs(&argc); - - __InvokeMain(argc, argv); -} \ No newline at end of file diff --git a/Services/.gitkeep b/Services/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Services/Seeker/Seeker.hxx b/Services/Seeker/Seeker.hxx new file mode 100644 index 00000000..0670c128 --- /dev/null +++ b/Services/Seeker/Seeker.hxx @@ -0,0 +1,171 @@ +/* + * ======================================================== + * + * hCore + * Copyright 2024 Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#ifndef __SEEKER__ +#define __SEEKER__ + +#include + +/* @brief Seeker SDK. */ +/* Seeker helps with GUI developement. */ + +enum +{ + kRegularFile, + kDirectory, + kJunctionFile, + kNetworkFile, + kNetworkDirectory, + kNetworkJunction, + kDrive, + kDevice, +}; + +enum +{ + kHardDrv = 110, + kOpticalDrv = 111, + kUsbDrv = 112, +}; + +enum +{ + kLangUs = 113, + kLangUk = 114, + kLangFr = 115, + kLangNl = 116, +}; + +#define kResourceExt ".rsc" +#define kExecutableExt ".exe" +#define kLibExt ".lib" +#define kShLibExt ".dlib" + +typedef void Void; +typedef void* VoidPtr; + +typedef wchar_t WideChar; +typedef wchar_t* WideCString; + +typedef __SIZE_TYPE__ SizeT; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +struct SeekerProtocol; + +// @brief Opens a Seeker window. +extern "C" VoidPtr SeekerOpenExplorer(const WideCString startCategory); + +// @brief Closes a Seeker window. +extern "C" Void SeekerCloseExplorer(VoidPtr handle); + +// @brief Make Seeker connect to endpoint. +extern "C" Void SeekerExplorerConnectToNetwork(VoidPtr handle, + const WideCString endpoint, + struct SeekerProtocol* proto); + +extern "C" Void SeekerExplorerChangeTo(VoidPtr handle, + const WideCString nodeName); + +// @brief Search for elements inside directory/drive +// returns a class list as voidstar. +extern "C" VoidPtr SeekerSearch(VoidPtr handle, + const WideCString where, + const WideCString forWhat); + +#define kProtocolStrLen 8 + +// @brief Seeker Location Protocol. +// @brief takes a handler class to handle server response. +struct SeekerProtocol +{ + WideChar fProtocol[kProtocolStrLen]; // ftp, sftp, http + VoidPtr fProtocolHandlerClass; + SizeT fProtocolHandlerClassSize; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +typedef void(*WndProcType)(int msg, VoidPtr lparam, VoidPtr wparam); + +extern "C" bool WindowClassCreate(const WideCString name, VoidPtr windowStruct, SizeT windowStructSz); +extern "C" VoidPtr WindowCreate(const WideCString name, const WideCString wndClass, VoidPtr parent); +extern "C" Void WindowFieldSet(const VoidPtr win, const WideCString key, const WideCString value); +extern "C" Void WindowFree(VoidPtr win); +extern "C" Void WindowProcSet(VoidPtr win, void(*winproc)(int msg, VoidPtr lparam, VoidPtr wparam)); +extern "C" Void WindowFreeClass(VoidPtr classPtr); + +// passing nullptr will give a console to the desktop. +extern "C" Void OpenConsole(VoidPtr handle); +extern "C" Void CloseConsole(VoidPtr handle); + +// Runtime functions +extern "C" void RtInitTerm(void); +extern "C" bool RtIsValidHeapPtr(VoidPtr heap); +extern "C" Void RtDialogAssert(const bool expr, const wchar_t* file, const wchar_t* expression); +extern "C" Void RtShellOpen(const WideCString path, int argc, const WideCString* argv); + +#define __WideExpr(x) L##x +#define RtWideString(x) __WideExpr(x) + +#define RtAssert(expr) RtDialogAssert(expr, RtWideString(__FILE__), RtWideString(#expr)) + +typedef VoidPtr HandlePtr; +typedef HandlePtr IdPtr; + +///////////////////////////////////////////////////// + +HandlePtr SeekerAboutDlg(Void); + +#define FINDER_YES L"Yes" +#define FINDER_NO L"No" + +#define kAssertInterrupt "sc $1" + +extern "C" Void QuickDrawRect(float x, float y, + float r, float g, float b, + float w, float h, float strike, + float radius); + +extern "C" Void QuickDrawPattern(float x, float y, + float* pattern, size_t sz, + float w, float h, float strike, + float radius); + +// @brief a C++ class. +typedef VoidPtr SeekerClassPtr; + +typedef struct +{ + float x, y; + float w, h; +} TAreaType; + +///////////////////////////////////////////////////// + +namespace Seeker +{ + class TControl + { + public: + explicit TControl() = default; + virtual ~TControl() = default; + + HCORE_COPY_DEFAULT(TControl); + + public: + virtual void Draw() noexcept = 0; + + public: + TAreaType fVisibleArea; + TAreaType fFullArea; + + }; +} +#endif /* ifndef __SEEKER__ */ \ No newline at end of file diff --git a/Services/Seeker/SeekerAbout.cxx b/Services/Seeker/SeekerAbout.cxx new file mode 100644 index 00000000..41046e35 --- /dev/null +++ b/Services/Seeker/SeekerAbout.cxx @@ -0,0 +1,16 @@ +/* + * ======================================================== + * + * hCore + * Copyright 2024 Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include + +HandlePtr SeekerAboutDlg(Void) +{ + HandlePtr windowHandle = WindowCreate(L"hCore", L"OSAboutDialog", nullptr); + return windowHandle; +} \ No newline at end of file diff --git a/Services/Seeker/SeekerAssert.cxx b/Services/Seeker/SeekerAssert.cxx new file mode 100644 index 00000000..0566b457 --- /dev/null +++ b/Services/Seeker/SeekerAssert.cxx @@ -0,0 +1,20 @@ +/* + * ======================================================== + * + * hCore + * Copyright 2024 Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include + +extern "C" Void RtDialogAssert(const bool expr, const wchar_t* file, const wchar_t* expression) +{ + auto handle = WindowCreate(L"Assertion failed!", L"OSWndAssert", nullptr); + + WindowFieldSet(handle, L"Title", L"Assertion failed!"); + WindowFieldSet(handle, L"ButtonClicked_OK", L"Abort"); + + asm (kAssertInterrupt); +} \ No newline at end of file diff --git a/Services/Seeker/SeekerDriver.cxx b/Services/Seeker/SeekerDriver.cxx new file mode 100644 index 00000000..6a6008d7 --- /dev/null +++ b/Services/Seeker/SeekerDriver.cxx @@ -0,0 +1,27 @@ +/* + * ======================================================== + * + * hCore + * Copyright 2024 Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include + +extern "C" Void DrawDesktopService(Void); +extern "C" Void DrawWindowService(Void); +extern "C" Void DrawMenuService(Void); +extern "C" Void DrawDialogService(Void); + +extern "C" Void PumpMessageService(Void); + +// @brief each app must call this for their region, otherwise it'll show a black rectangle. +extern "C" Void SeekerMessageLoop(Void) +{ + DrawDesktopService(); + DrawMenuService(); + DrawWindowService(); + DrawDialogService(); + PumpMessageService(); +} diff --git a/Services/Seeker/SeekerFileWnd.cxx b/Services/Seeker/SeekerFileWnd.cxx new file mode 100644 index 00000000..b2636cc6 --- /dev/null +++ b/Services/Seeker/SeekerFileWnd.cxx @@ -0,0 +1,54 @@ +/* + * ======================================================== + * + * hCore + * Copyright 2024 Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include + +// Source code of the Seeker Window. + +// @brief Opens a Seeker window. +extern "C" VoidPtr SeekerOpenExplorer(const WideCString startCategory) +{ + auto win = WindowCreate(L"Seeker", L"OSSeekerWnd", nullptr); + + if (win) + { + WindowFieldSet(win, L"Category", startCategory); + WindowFieldSet(win, L"CanClose", FINDER_NO); + WindowFieldSet(win, L"ClosePolicy", L"Restart"); + + return win; + } + + RtAssert(win != nullptr); + + return nullptr; +} + +// @brief Closes a Seeker window. +extern "C" Void SeekerCloseExplorer(VoidPtr handle) +{ + if (RtIsValidHeapPtr(handle)) + { + WindowFree(handle); + } +} + +extern "C" Void SeekerExplorerConnectToNetwork(VoidPtr handle, + const WideCString endpoint, + struct SeekerProtocol* proto) +{ + if (handle) + { + WindowFieldSet(handle, L"NetworkProtocolEndpoint", endpoint); + WindowFieldSet(handle, L"NetworkProtocolClass", (wchar_t*)proto->fProtocolHandlerClass); + WindowFieldSet(handle, L"NetworkProtocolClassSize", (wchar_t*)proto->fProtocolHandlerClassSize); + + WindowFieldSet(handle, L"NetworkProtocolFire", FINDER_YES); + } +} \ No newline at end of file diff --git a/Services/Seeker/SeekerSubsystemStart.cxx b/Services/Seeker/SeekerSubsystemStart.cxx new file mode 100644 index 00000000..9fa6e409 --- /dev/null +++ b/Services/Seeker/SeekerSubsystemStart.cxx @@ -0,0 +1,30 @@ +/* + * ======================================================== + * + * hCore + * Copyright 2024 Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#include + +extern "C" Void __InitCxxGlobals(Void); +extern "C" Void __InitCommonCtrls(Void); +extern "C" Void __InitSeekerCtrls(Void); +extern "C" char** __InitArgs(int* argc); + +extern "C++" Void __InvokeMain(int argc, char** argv); + +/* @brief As requested by PEF. */ +extern "C" Void __start(Void) +{ + __InitCxxGlobals(); + __InitSeekerCtrls(); + __InitCommonCtrls(); + + int argc = 0; + auto argv = __InitArgs(&argc); + + __InvokeMain(argc, argv); +} \ No newline at end of file diff --git a/Source/CodeManager.cxx b/Source/CodeManager.cxx index 8b0689c0..ba117346 100644 --- a/Source/CodeManager.cxx +++ b/Source/CodeManager.cxx @@ -20,11 +20,11 @@ namespace hCore { namespace Detail { - UInt32 rt_get_pef_platform(void) + UInt32 rt_get_pef_platform(void) noexcept { -#ifdef __powerpc - return kPefArchPOWER; -#elif defined(__arc__) +#ifdef __32x0__ + return kPefArch32x0; +#elif defined(__64x0__) return kPefArch64x0; #elif defined(__x86_64__) return kPefArchAMD64; diff --git a/Source/KMain.cxx b/Source/KMain.cxx index 8a96aee0..f6a4f54c 100644 --- a/Source/KMain.cxx +++ b/Source/KMain.cxx @@ -16,7 +16,7 @@ extern "C" void Main(hCore::VoidPtr this_image) MUST_PASS(hCore::initialize_hardware_components()); hCore::IFilesystemManager::Mount(new hCore::NewFilesystemManager()); - hCore::PEFLoader img("/System/Seeker"); + hCore::PEFLoader img("/System/Seeker.out"); if (!hCore::Utils::execute_from_image(img)) { diff --git a/Source/Network/NetworkDevice.cpp b/Source/Network/NetworkDevice.cpp index e20aeaac..766e1f2e 100644 --- a/Source/Network/NetworkDevice.cpp +++ b/Source/Network/NetworkDevice.cpp @@ -15,7 +15,7 @@ namespace hCore { NetworkDevice::NetworkDevice(void (*out)(NetworkDeviceCommand), void (*in)(NetworkDeviceCommand), void(*on_cleanup)(void)) - : IDevice(out, in), fCleanup(on_cleanup) + : DeviceInterface(out, in), fCleanup(on_cleanup) { #ifdef __DEBUG__ kcout << "NetworkDevice init.\r\n"; diff --git a/StorageKit/NVME.hpp b/StorageKit/NVME.hpp index 68c3a0b7..13f6131c 100644 --- a/StorageKit/NVME.hpp +++ b/StorageKit/NVME.hpp @@ -16,13 +16,13 @@ namespace hCore { class NVMEPacket; - class NVMEDevice : public IDevice + class NVMEDevice : public DeviceInterface { public: NVMEDevice(void(*Out)(NVMEPacket outpacket), void(*In)(NVMEPacket inpacket), void(*Cleanup)(void)) - : IDevice(Out, In), fCleanup(Cleanup) + : DeviceInterface(Out, In), fCleanup(Cleanup) {} virtual ~NVMEDevice() diff --git a/newBoot/Source/Start.cxx b/newBoot/Source/Start.cxx index 5f320ac7..7c8b5e04 100644 --- a/newBoot/Source/Start.cxx +++ b/newBoot/Source/Start.cxx @@ -9,11 +9,9 @@ #include -extern "C" void __AppMain(void) +extern "C" void Main(void) { BKTextWriter writer; - writer.WriteString("Starting hCore...", kBlack, kWhite, 0, 0); - - const char* args[] = { "/hCore.bin" }; - const char* envp[] = { "/" }; + writer.WriteString("Booting Kernel...", kBlack, kWhite, 0, 0); + } diff --git a/newBoot/Source/makefile b/newBoot/Source/makefile index 81bb2096..835e4afa 100644 --- a/newBoot/Source/makefile +++ b/newBoot/Source/makefile @@ -1,13 +1,9 @@ -CC=fcc -CCFLAGS=-I ../ -ffreestanding -nostdlib -ASM=fasm -ASMFLAGS=/ARC /PEF +CC=gcc +CCFLAGS=-I../ -I../../ -std=c++20 -ffreestanding -nostdlib -c .PHONY: arch-arc arch-arc: - ${CC} ${CCFLAGS} Boot.cpp Start.cpp -c - ${ASM} ${ASMFLAGS} Arch/ARC/XPM.asm - ${ASM} ${ASMFLAGS} Arch/ARC/Crt0.asm + ${CC} ${CCFLAGS} Start.cxx CC_GNU=x86_64-elf-gcc LD_GNU=x86_64-elf-ld @@ -16,7 +12,7 @@ FLAG_GNU=-I../ -I../../../efiSDK/inc -c -ffreestanding -fno-rtti -fno-exceptions .PHONY: arch-amd64 arch-amd64: $(CC_GNU) $(FLAG_GNU) Arch/AMD64/BootAMD64.cxx *.cxx - $(LD_GNU) *.o -e __AppMain -Ttext 0x000 --oformat binary -o BootloaderStage2.bin + $(LD_GNU) *.o -e Main -Ttext 0x000 --oformat binary -o BootloaderStage2.bin .PHONY: clean clean: -- cgit v1.2.3