summaryrefslogtreecommitdiffhomepage
path: root/Public/Kits/System.Core
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-21 22:39:57 +0100
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-21 22:39:57 +0100
commit80b76666074aa94f165e3db7b3dda2145ca6efc0 (patch)
treeba8a189df55f3dab4d3623eb4617c7b5d33c7f07 /Public/Kits/System.Core
parentdafcc53840c41dab7a1897868d020a5b196d5b2d (diff)
unstable, kernel+api: important breaking changes.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Public/Kits/System.Core')
-rw-r--r--Public/Kits/System.Core/Headers/Containers/ODF.hxx (renamed from Public/Kits/System.Core/Containers/ODF.hxx)22
-rw-r--r--Public/Kits/System.Core/Headers/Containers/XIFF.hxx (renamed from Public/Kits/System.Core/Containers/XIFF.hxx)14
-rw-r--r--Public/Kits/System.Core/Headers/Defs.hxx (renamed from Public/Kits/System.Core/Defs.hxx)116
-rw-r--r--Public/Kits/System.Core/Headers/File.hxx (renamed from Public/Kits/System.Core/File.hxx)27
-rw-r--r--Public/Kits/System.Core/Headers/Heap.hxx63
-rw-r--r--Public/Kits/System.Core/Headers/Hint.hxx (renamed from Public/Kits/System.Core/Hint.hxx)0
-rw-r--r--Public/Kits/System.Core/Headers/Thread.hxx49
-rw-r--r--Public/Kits/System.Core/Heap.cxx45
-rw-r--r--Public/Kits/System.Core/Heap.hxx79
-rw-r--r--Public/Kits/System.Core/HeapRuntime.cxx44
-rw-r--r--Public/Kits/System.Core/Makefile2
-rw-r--r--Public/Kits/System.Core/RISCV/.gitkeep0
-rw-r--r--Public/Kits/System.Core/Sources/DllMain.cxx (renamed from Public/Kits/System.Core/InitRuntime.cxx)6
-rw-r--r--Public/Kits/System.Core/Sources/Heap.cxx83
-rw-r--r--Public/Kits/System.Core/Sources/New+Delete.cxx (renamed from Public/Kits/System.Core/New+Delete.cxx)17
-rw-r--r--Public/Kits/System.Core/System.Core.hxx14
-rw-r--r--Public/Kits/System.Core/System.hxx18
-rw-r--r--Public/Kits/System.Core/Threading.hxx34
18 files changed, 333 insertions, 300 deletions
diff --git a/Public/Kits/System.Core/Containers/ODF.hxx b/Public/Kits/System.Core/Headers/Containers/ODF.hxx
index 3c4e81fc..53098c3f 100644
--- a/Public/Kits/System.Core/Containers/ODF.hxx
+++ b/Public/Kits/System.Core/Headers/Containers/ODF.hxx
@@ -5,7 +5,7 @@
#ifndef __ODF__
#define __ODF__
-#include <System.Core/Defs.hxx>
+#include <System.Core/Headers/Defs.hxx>
/**
* @brief Open Document Format
@@ -18,26 +18,26 @@
/// @brief Document file header.
typedef struct ODFFileHeader
{
- CHAR f_Ident[kFourCCLength_ODF];
+ CharacterType f_Ident[kFourCCLength_ODF];
- INT32 f_DocumentKind;
- INT32 f_DocumentSize;
+ Int32Type f_DocumentKind;
+ Int32Type f_DocumentSize;
- INT64 f_MetaForkOffset;
- INT64 f_DocumentForkOffset;
+ Int64Type f_MetaForkOffset;
+ Int64Type f_DocumentForkOffset;
- CHAR f_Padding[4];
+ CharacterType f_Padding[4];
} PACKED ODFFileHeader;
/// @brief ODF Fork header
typedef struct ODFForkHeader
{
- CHAR f_MetadataName[255];
+ CharacterType f_MetadataName[255];
- INT32 f_MetadataKind;
- INT32 f_MetadataSize;
+ Int32Type f_MetadataKind;
+ Int32Type f_MetadataSize;
- CHAR f_Padding;
+ CharacterType f_Padding;
} PACKED ODFForkHeader;
#endif // !__ODF__ \ No newline at end of file
diff --git a/Public/Kits/System.Core/Containers/XIFF.hxx b/Public/Kits/System.Core/Headers/Containers/XIFF.hxx
index 622a5a87..e14868a6 100644
--- a/Public/Kits/System.Core/Containers/XIFF.hxx
+++ b/Public/Kits/System.Core/Headers/Containers/XIFF.hxx
@@ -12,7 +12,7 @@
------------------------------------------------------- */
-#include <System.Core/Defs.hxx>
+#include <System.Core/Headers/Defs.hxx>
/// @brief four-character code for XIFF.
#define kFourCCLength_XIFF 4
@@ -29,12 +29,12 @@
*/
struct PACKED XiffHeader final {
- BYTE f_Magic[kFourCCLength_XIFF]; // XIFF string (includes \0)
- DWORD f_Size; // overall size of header (XiffHeader) in bytes
- DWORD f_FormatType; // format type. generic
- BYTE f_SpecificMag[kFourCCLength_XIFF]; // The sub header magic
- DWORD f_SpecificSize; // length of the format data
- DWORD f_SpecificFormatType; // format type. generic
+ ByteType f_Magic[kFourCCLength_XIFF]; // XIFF string (includes \0)
+ DWordType f_Size; // overall size of header (XiffHeader) in bytes
+ DWordType f_FormatType; // format type. generic
+ ByteType f_SpecificMag[kFourCCLength_XIFF]; // The sub header magic
+ DWordType f_SpecificSize; // length of the format data
+ DWordType f_SpecificFormatType; // format type. generic
};
typedef struct XiffHeader XiffHeader;
diff --git a/Public/Kits/System.Core/Defs.hxx b/Public/Kits/System.Core/Headers/Defs.hxx
index 6d0fb99a..367849da 100644
--- a/Public/Kits/System.Core/Defs.hxx
+++ b/Public/Kits/System.Core/Headers/Defs.hxx
@@ -14,8 +14,6 @@
#undef CA_MUST_PASS
#endif
-#include <ObjectKit/ObjectKit.hxx>
-
#ifdef _DEBUG
#define CA_MUST_PASS(e) { if (!e) { __assert_chk_fail() } }
#else
@@ -40,38 +38,56 @@ CA_EXTERN_C void __assert_chk_fail(void);
#define CA_PASCAL CA_STDCALL
-typedef __UINT8_TYPE__ BYTE;
-typedef __UINT16_TYPE__ WORD;
-typedef __UINT32_TYPE__ DWORD;
-typedef __UINT64_TYPE__ QWORD;
+typedef __UINT8_TYPE__ ByteType;
+typedef __UINT16_TYPE__ WordType;
+typedef __UINT32_TYPE__ DWordType;
+typedef __UINT64_TYPE__ QWordType;
+typedef __SIZE_TYPE__ SizeType;
+
+typedef char CharacterType;
+typedef CharacterType* PtrCharacterType;
+
+typedef void* PtrVoidType;
+typedef void VoidType;
+
+typedef __UINTPTR_TYPE__ UIntPtrType;
+typedef __INTPTR_TYPE__ IntPtrType;
+typedef __UINT64_TYPE__ UInt64Type;
+typedef __INT64_TYPE__ Int64Type;
+typedef __UINT32_TYPE__ UInt32Type;
+typedef __INT32_TYPE__ Int32Type;
+
+typedef CharacterType BooleanType;
+
+#define CA_COPY_DELETE(KLASS) \
+ KLASS &operator=(const KLASS &) = delete; \
+ KLASS(const KLASS &) = delete;
+
+
+#define CA_COPY_DEFAULT(KLASS) \
+ KLASS &operator=(const KLASS &) = default; \
+ KLASS(const KLASS &) = default;
-typedef char CHAR;
-typedef CHAR* PCHAR;
-typedef void* PVOID;
-typedef void VOID;
+#define CA_MOVE_DELETE(KLASS) \
+ KLASS &operator=(KLASS &&) = delete; \
+ KLASS(KLASS &&) = delete;
-typedef __UINTPTR_TYPE__ UINT_PTR;
-typedef __INTPTR_TYPE__ INT_PTR;
-typedef __UINT64_TYPE__ UINT64;
-typedef __INT64_TYPE__ INT64;
-typedef __UINT32_TYPE__ UINT32;
-typedef __INT32_TYPE__ INT32;
-typedef __WCHAR_TYPE__ WCHAR;
-typedef WCHAR* PWCHAR;
+#define CA_MOVE_DEFAULT(KLASS) \
+ KLASS &operator=(KLASS &&) = default; \
+ KLASS(KLASS &&) = default;
-typedef CHAR BOOL;
-#define TRUE 1
-#define FALSE 0
+#define Yes 1
+#define No 0
#define CA_PTR *
#define CA_FAR __far
#define CA_NEAR __near
-#define CA_UNREFERENCED_PARAMETER(e) ((VOID)e)
+#define CA_UNREFERENCED_PARAMETER(e) ((VoidType)e)
#ifdef __x86_64__
# define _M_AMD64 2
@@ -103,20 +119,20 @@ typedef CHAR BOOL;
#define CA_CONSTEXPR
#endif // __cplusplus
-CA_INLINE ObjectPtr kInstanceObject;
-
enum HcProcessCall {
kProcessCallAllocPtr = 1,
kProcessCallFreePtr,
kProcessCallSizePtr,
kProcessCallCheckPtr,
kProcessCallAllocStack,
+ /// @brief Open a specific handle (can be used as sel to call methods related to it.)
kProcessCallOpenHandle,
kProcessCallCloseHandle,
+ /// @brief Number of process calls.
kProcessCallsCount = 7,
};
-#include <System.Core/Hint.hxx>
+#include <System.Core/Headers/Hint.hxx>
class SystemException {
public:
@@ -124,7 +140,7 @@ class SystemException {
virtual ~SystemException() = default;
public:
- HCORE_COPY_DEFAULT(SystemException);
+ CA_COPY_DEFAULT(SystemException);
public:
virtual const char *Name() = 0;
@@ -140,7 +156,7 @@ class ObjectNotFoundException : public SystemException {
virtual ~ObjectNotFoundException() = default;
public:
- HCORE_COPY_DEFAULT(ObjectNotFoundException);
+ CA_COPY_DEFAULT(ObjectNotFoundException);
public:
const char *Name() override { return "ObjectNotFoundException"; }
@@ -159,7 +175,7 @@ class PointerException : public SystemException {
virtual ~PointerException() = default;
public:
- HCORE_COPY_DEFAULT(PointerException);
+ CA_COPY_DEFAULT(PointerException);
public:
const char *Name() override { return "PointerException"; }
@@ -178,7 +194,7 @@ class NullPointerException : public SystemException {
virtual ~NullPointerException() = default;
public:
- HCORE_COPY_DEFAULT(NullPointerException);
+ CA_COPY_DEFAULT(NullPointerException);
public:
const char *Name() override { return "NullPointerException"; }
@@ -188,3 +204,45 @@ class NullPointerException : public SystemException {
const char *mReason{
"System.Core: NullPointerException: Catastrophic failure!"};
};
+
+#define kObjectGlobalNamespaceSystem "HCORE_ROOT\\"
+#define kObjectGlobalNamespaceUser "HCORE_USER_ROOT\\"
+
+enum {
+ kObjectTypeProcess,
+ kObjectTypeFile,
+ kObjectTypeDevice,
+ kObjectTypeNetwork,
+ kObjectTypeInvalid,
+ KObjectTypeUserDefined = 0xCF,
+ kObjectTypeCount = 5,
+};
+
+/**
+ * @brief GUID type, something you can also find in CFKit.
+ * @author AMlal El Mahrouss
+ */
+typedef struct GUID final {
+ DWordType Data1;
+ WordType Data2;
+ WordType Data3;
+ ByteType Data4[8];
+} GUIDType, *PtrGUIDType;
+
+/// \brief Object handle.
+/// \author Amlal El Mahrouss
+typedef struct Object final {
+ CharacterType ObjectName[255];
+ DWordType ObjectType;
+ CharacterType ObjectNamespace[255];
+
+ VoidType(*Release)(struct Object* Self);
+ IntPtrType(*Invoke)(struct Object* Self, DWordType Sel, ...);
+ VoidType(*Query)(struct Object* Self, PtrVoidType* Dst, SizeType SzDst, struct GUID* GuidOf);
+} Object, *ObjectPtr;
+
+#define object_cast reinterpret_cast<ObjectPtr>
+
+CA_EXTERN_C ObjectPtr HcGetInstanceObject(void);
+
+CA_INLINE ObjectPtr kInstanceObject;
diff --git a/Public/Kits/System.Core/File.hxx b/Public/Kits/System.Core/Headers/File.hxx
index 7ae70faf..48331c15 100644
--- a/Public/Kits/System.Core/File.hxx
+++ b/Public/Kits/System.Core/Headers/File.hxx
@@ -7,35 +7,34 @@
#ifndef __FILE_API__
#define __FILE_API__
-#include <CompilerKit/CompilerKit.hxx>
-#include <NewKit/Defines.hpp>
+#include <System.Core/Headers/Defs.hxx>
/// @brief SOM class, translated to C++
namespace System {
-class File final {
+class FileInterface final {
public:
- explicit File(const char *path) {
+ explicit FileInterface(const char *path) {
mHandle = kInstanceObject->Invoke(kInstanceObject, kProcessCallOpenHandle,
0, path);
}
- ~File() {
+ ~FileInterface() {
kInstanceObject->Invoke(kInstanceObject, kProcessCallCloseHandle, 0,
mHandle);
}
public:
- HCORE_COPY_DEFAULT(File);
+ CA_COPY_DEFAULT(FileInterface);
public:
- voidPtr Read(UIntPtr off, SizeT sz) { return (VoidPtr)kInstanceObject->Invoke(kInstanceObject, mHandle, 2, off, sz); }
- voidPtr Read(SizeT sz) { return (VoidPtr)kInstanceObject->Invoke(kInstanceObject, mHandle, 3, sz); }
+ PtrVoidType Read(UIntPtrType off, SizeType sz) { return (PtrVoidType)kInstanceObject->Invoke(kInstanceObject, mHandle, 2, off, sz); }
+ PtrVoidType Read(SizeType sz) { return (PtrVoidType)kInstanceObject->Invoke(kInstanceObject, mHandle, 3, sz); }
- void Write(VoidPtr buf, UIntPtr off, SizeT sz) { kInstanceObject->Invoke(kInstanceObject, mHandle, 4, buf, off, sz); }
- void Write(VoidPtr buf, SizeT sz) { kInstanceObject->Invoke(kInstanceObject, mHandle, 5, buf, sz); }
+ void Write(PtrVoidType buf, UIntPtrType off, SizeType sz) { kInstanceObject->Invoke(kInstanceObject, mHandle, 4, buf, off, sz); }
+ void Write(PtrVoidType buf, SizeType sz) { kInstanceObject->Invoke(kInstanceObject, mHandle, 5, buf, sz); }
- void Seek(UIntPtr off) { kInstanceObject->Invoke(kInstanceObject, mHandle, 5); }
+ void Seek(UIntPtrType off) { kInstanceObject->Invoke(kInstanceObject, mHandle, 5); }
void Rewind() { kInstanceObject->Invoke(kInstanceObject, mHandle, 6); }
public:
@@ -43,10 +42,10 @@ class File final {
void MIME(const char *mime);
private:
- IntPtr mHandle;
+ IntPtrType mHandle;
};
-typedef File *FilePtr;
+typedef FileInterface *FilePtr;
/// @brief file exception
/// Throws when the file isn't found or invalid.
@@ -56,7 +55,7 @@ class FileException : public SystemException {
virtual ~FileException() = default;
public:
- HCORE_COPY_DEFAULT(FileException);
+ CA_COPY_DEFAULT(FileException);
public:
const char *Name() override { return "FileException"; }
diff --git a/Public/Kits/System.Core/Headers/Heap.hxx b/Public/Kits/System.Core/Headers/Heap.hxx
new file mode 100644
index 00000000..43eaacab
--- /dev/null
+++ b/Public/Kits/System.Core/Headers/Heap.hxx
@@ -0,0 +1,63 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+------------------------------------------- */
+
+#pragma once
+
+#include <System.Core/Headers/Defs.hxx>
+
+namespace System {
+class MemoryException;
+
+typedef PtrVoidType HeapPtr;
+
+enum {
+ kHeapExpandable = 2,
+ kHeapNoExecute = 4,
+ kHeapShared = 6,
+ kHeapReadOnly = 8,
+ kHeapNoFlags = 0
+};
+
+class HeapInterface final {
+ private:
+ explicit HeapInterface();
+
+ public:
+ ~HeapInterface();
+
+ public:
+ CA_COPY_DEFAULT(HeapInterface);
+
+ public:
+ static HeapInterface *Shared() noexcept;
+
+ public:
+ void Delete(HeapPtr me) noexcept;
+ SizeType Size(HeapPtr me) noexcept;
+ HeapPtr New(const SizeType &sz,
+ const DWordType flags = kHeapNoFlags);
+};
+
+
+/// @brief heap exception
+/// Throws when the heap pointer isn't found or invalid.
+class HeapException : public SystemException {
+ public:
+ explicit HeapException() = default;
+ virtual ~HeapException() = default;
+
+ public:
+ CA_COPY_DEFAULT(HeapException);
+
+ public:
+ const char *Name() override { return "HeapException"; }
+ const char *Reason() override { return mReason; }
+
+ private:
+ const char *mReason{"System.Core: HeapException: Catastrophic failure!"};
+};
+
+} // namespace System \ No newline at end of file
diff --git a/Public/Kits/System.Core/Hint.hxx b/Public/Kits/System.Core/Headers/Hint.hxx
index 86faf455..86faf455 100644
--- a/Public/Kits/System.Core/Hint.hxx
+++ b/Public/Kits/System.Core/Headers/Hint.hxx
diff --git a/Public/Kits/System.Core/Headers/Thread.hxx b/Public/Kits/System.Core/Headers/Thread.hxx
new file mode 100644
index 00000000..306419b3
--- /dev/null
+++ b/Public/Kits/System.Core/Headers/Thread.hxx
@@ -0,0 +1,49 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+------------------------------------------- */
+
+//
+// Created by Amlal on 3/18/24
+//
+
+#ifndef __THREAD_API__
+#define __THREAD_API__
+
+#include <System.Core/Headers/Defs.hxx>
+
+/// @brief Thread Information Block, which holds information about the running thread.
+typedef PtrVoidType PtrThread;
+
+/// @brief Creates a new thread.
+/// @param StartProc
+/// @param OptionalHeap
+/// @param OptionalStack
+/// @param Detach
+/// @param Join
+/// @return
+PtrThread HcCreateThread(_Input PtrVoidType StartProc,
+ _Optional _InOut PtrVoidType OptionalHeap,
+ _Optional _InOut PtrVoidType OptionalStack,
+ _Optional _Input BooleanType Detach,
+ _Optional _Input BooleanType Join);
+
+/// @brief Destroys the thread object.
+/// @param ThreadPtr
+/// @return
+BooleanType HcDestroyThread(_Input PtrThread ThreadPtr);
+
+/// @brief Stops the thread.
+/// @param ThreadPtr
+/// @return
+BooleanType HcStopThread(_Input PtrThread ThreadPtr);
+
+/// @brief Resumes it.
+/// @param ThreadPtr
+/// @return
+BooleanType HcResumeThread(_Input PtrThread ThreadPtr);
+
+QWordType HcProcessIdThread(_Input PtrThread ThreadPtr);
+
+#endif // __THREAD_API__
diff --git a/Public/Kits/System.Core/Heap.cxx b/Public/Kits/System.Core/Heap.cxx
deleted file mode 100644
index 55850b1a..00000000
--- a/Public/Kits/System.Core/Heap.cxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
-------------------------------------------- */
-
-#include <System.Core/Heap.hxx>
-#include <System.Core/System.Core.hxx>
-
-using namespace System;
-
-/// @brief Shared instance of the heap.
-/// @return
-Heap* Heap::Shared() noexcept {
- static Heap* heap = nullptr;
-
- if (!heap) {
- heap = new Heap();
- }
-
- return heap;
-}
-
-Heap::Heap() {
- CA_MUST_PASS(HcProcessHeapExists(kInstanceObject, (VoidPtr)this));
-}
-
-Heap::~Heap() { delete this; }
-
-void Heap::Delete(HeapPtr me) noexcept {
- CA_MUST_PASS(me);
- HcFreeProcessHeap(kInstanceObject, me);
-}
-
-SizeT Heap::Size(HeapPtr me) noexcept {
- CA_MUST_PASS(me);
- return HcProcessHeapSize(kInstanceObject, me);
-}
-
-HeapPtr Heap::New(const SizeT& sz, const Int32 flags) {
- SizeT _sz = sz;
- if (!_sz) ++_sz;
-
- return HcAllocateProcessHeap(kInstanceObject, _sz, flags);
-} \ No newline at end of file
diff --git a/Public/Kits/System.Core/Heap.hxx b/Public/Kits/System.Core/Heap.hxx
deleted file mode 100644
index ff0fc75a..00000000
--- a/Public/Kits/System.Core/Heap.hxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
-------------------------------------------- */
-
-#pragma once
-
-#include <CompilerKit/CompilerKit.hxx>
-#include <System.Core/Defs.hxx>
-
-#define kAllocationTypes 2
-
-CA_EXTERN_C PVOID HcAllocateProcessHeap(ObjectPtr refObj, QWORD sz,
- DWORD flags);
-CA_EXTERN_C BOOL HcProcessHeapExists(ObjectPtr refObj, PVOID ptr);
-CA_EXTERN_C QWORD HcProcessHeapSize(ObjectPtr refObj, PVOID ptr);
-CA_EXTERN_C VOID HcFreeProcessHeap(ObjectPtr refObj, PVOID ptr);
-CA_EXTERN_C ObjectPtr HcGetInstanceObject(void);
-
-enum HcAllocationKind {
- kStandardAllocation = 0xC,
- kArrayAllocation = 0xD,
-};
-
-namespace System {
-using namespace HCore;
-
-class MemoryException;
-
-typedef PVOID HeapPtr;
-
-enum {
- kHeapExpandable = 2,
- kHeapNoExecute = 4,
- kHeapShared = 6,
- kHeapReadOnly = 8,
- kHeapNoFlags = 0
-};
-
-class Heap final {
- private:
- explicit Heap();
-
- public:
- ~Heap();
-
- public:
- HCORE_COPY_DEFAULT(Heap);
-
- public:
- static Heap *Shared() noexcept;
-
- public:
- void Delete(HeapPtr me) noexcept;
- SizeT Size(HeapPtr me) noexcept;
- HeapPtr New(const SizeT &sz, const Int32 flags = kHeapNoFlags);
-};
-
-
-/// @brief heap exception
-/// Throws when the heap pointer isn't found or invalid.
-class HeapException : public SystemException {
- public:
- explicit HeapException() = default;
- virtual ~HeapException() = default;
-
- public:
- HCORE_COPY_DEFAULT(HeapException);
-
- public:
- const char *Name() override { return "HeapException"; }
- const char *Reason() override { return mReason; }
-
- private:
- const char *mReason{"System.Core: HeapException: Catastrophic failure!"};
-};
-
-} // namespace System \ No newline at end of file
diff --git a/Public/Kits/System.Core/HeapRuntime.cxx b/Public/Kits/System.Core/HeapRuntime.cxx
deleted file mode 100644
index c2f1f0e9..00000000
--- a/Public/Kits/System.Core/HeapRuntime.cxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/** ===========================================
- (C) Mahrouss Logic
- ===========================================*/
-
-#include <System.Core/Heap.hxx>
-
-/// @brief Allocate from the user's heap.
-/// @param refObj Process object.
-/// @param sz size of object.
-/// @param flags flags.
-/// @return
-CA_EXTERN_C PVOID HcAllocateProcessHeap(ObjectPtr refObj, QWORD sz,
- DWORD flags) {
- CA_MUST_PASS(sz);
- CA_MUST_PASS(flags);
-
- return (PVOID)refObj->Invoke(refObj, kProcessCallAllocPtr, sz, flags);
-}
-
-/// @brief Free pointer from the user's heap.
-/// @param refObj Process object.
-/// @param ptr the pointer to free.
-CA_EXTERN_C VOID HcFreeProcessHeap(ObjectPtr refObj, PVOID ptr) {
- CA_MUST_PASS(ptr);
- CA_UNREFERENCED_PARAMETER(refObj->Invoke(refObj, kProcessCallFreePtr, ptr));
-}
-
-/// @brief Get pointer size.
-/// @param refObj Process object.
-/// @param ptr the pointer to find.
-/// @return the size.
-CA_EXTERN_C QWORD HcProcessHeapSize(ObjectPtr refObj, PVOID ptr) {
- CA_MUST_PASS(ptr);
- return refObj->Invoke(refObj, kProcessCallSizePtr, ptr);
-}
-
-/// @brief Check if the pointer exists.
-/// @param refObj Process object.
-/// @param ptr the pointer to check.
-/// @return if it exists
-CA_EXTERN_C BOOL HcProcessHeapExists(ObjectPtr refObj, PVOID ptr) {
- CA_MUST_PASS(ptr);
- return refObj->Invoke(refObj, kProcessCallCheckPtr, ptr);
-}
diff --git a/Public/Kits/System.Core/Makefile b/Public/Kits/System.Core/Makefile
index fb0f3e87..13fdf960 100644
--- a/Public/Kits/System.Core/Makefile
+++ b/Public/Kits/System.Core/Makefile
@@ -9,7 +9,7 @@ OUTPUT=System.Core.dll
.PHONY: build-core-amd64
build-core-amd64:
- $(CC) -I../ -I$(HOME) -I../../../Private/ $(CCFLAGS) $(wildcard *.cxx) $(wildcard AMD64/*.s) -o $(OUTPUT)
+ $(CC) -I../ -I$(HOME) -I../../../Private/ $(CCFLAGS) $(wildcard Sources/*.cxx) $(wildcard AMD64/*.s) -o $(OUTPUT)
.PHONY: all
all: build-core
diff --git a/Public/Kits/System.Core/RISCV/.gitkeep b/Public/Kits/System.Core/RISCV/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Public/Kits/System.Core/RISCV/.gitkeep
diff --git a/Public/Kits/System.Core/InitRuntime.cxx b/Public/Kits/System.Core/Sources/DllMain.cxx
index 8d5596ca..9412cbbb 100644
--- a/Public/Kits/System.Core/InitRuntime.cxx
+++ b/Public/Kits/System.Core/Sources/DllMain.cxx
@@ -2,11 +2,11 @@
(C) Mahrouss Logic
===========================================*/
-#include <System.Core/Heap.hxx>
+#include <System.Core/Headers/Heap.hxx>
-/// @brief Inits the process runtime
+/// @brief Inits the DLL.
/// @return if it was succesful or not.
-DWORD HcInitRuntime(VOID) {
+DWordType __DllMain(VoidType) {
kInstanceObject = HcGetInstanceObject();
CA_MUST_PASS(kInstanceObject);
diff --git a/Public/Kits/System.Core/Sources/Heap.cxx b/Public/Kits/System.Core/Sources/Heap.cxx
new file mode 100644
index 00000000..b3f43ad3
--- /dev/null
+++ b/Public/Kits/System.Core/Sources/Heap.cxx
@@ -0,0 +1,83 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+------------------------------------------- */
+
+#include <System.Core/Headers/Heap.hxx>
+
+/// @brief Allocate from the user's heap.
+/// @param refObj Process object.
+/// @param sz size of object.
+/// @param flags flags.
+/// @return
+CA_EXTERN_C PtrVoidType HcAllocateProcessHeap(ObjectPtr refObj, QWordType sz,
+ DWordType flags) {
+ CA_MUST_PASS(sz);
+ CA_MUST_PASS(flags);
+
+ return (PtrVoidType)refObj->Invoke(refObj, kProcessCallAllocPtr, sz, flags);
+}
+
+/// @brief Free pointer from the user's heap.
+/// @param refObj Process object.
+/// @param ptr the pointer to free.
+CA_EXTERN_C VoidType HcFreeProcessHeap(ObjectPtr refObj, PtrVoidType ptr) {
+ CA_MUST_PASS(ptr);
+ CA_UNREFERENCED_PARAMETER(refObj->Invoke(refObj, kProcessCallFreePtr, ptr));
+}
+
+/// @brief Get pointer size.
+/// @param refObj Process object.
+/// @param ptr the pointer to find.
+/// @return the size.
+CA_EXTERN_C QWordType HcProcessHeapSize(ObjectPtr refObj, PtrVoidType ptr) {
+ CA_MUST_PASS(ptr);
+ return refObj->Invoke(refObj, kProcessCallSizePtr, ptr);
+}
+
+/// @brief Check if the pointer exists.
+/// @param refObj Process object.
+/// @param ptr the pointer to check.
+/// @return if it exists
+CA_EXTERN_C BooleanType HcProcessHeapExists(ObjectPtr refObj, PtrVoidType ptr) {
+ CA_MUST_PASS(ptr);
+ return refObj->Invoke(refObj, kProcessCallCheckPtr, ptr);
+}
+
+using namespace System;
+
+/// @brief Shared instance of the heap.
+/// @return
+HeapInterface* HeapInterface::Shared() noexcept {
+ static HeapInterface* heap = nullptr;
+
+ if (!heap) {
+ heap = new HeapInterface();
+ }
+
+ return heap;
+}
+
+HeapInterface::HeapInterface() {
+ CA_MUST_PASS(HcProcessHeapExists(kInstanceObject, (PtrVoidType)this));
+}
+
+HeapInterface::~HeapInterface() { delete this; }
+
+void HeapInterface::Delete(HeapPtr me) noexcept {
+ CA_MUST_PASS(me);
+ HcFreeProcessHeap(kInstanceObject, me);
+}
+
+SizeType HeapInterface::Size(HeapPtr me) noexcept {
+ CA_MUST_PASS(me);
+ return HcProcessHeapSize(kInstanceObject, me);
+}
+
+HeapPtr HeapInterface::New(const SizeType& sz, const DWordType flags) {
+ SizeType _sz = sz;
+ if (!_sz) ++_sz;
+
+ return HcAllocateProcessHeap(kInstanceObject, _sz, flags);
+}
diff --git a/Public/Kits/System.Core/New+Delete.cxx b/Public/Kits/System.Core/Sources/New+Delete.cxx
index 507cb7a3..019db66c 100644
--- a/Public/Kits/System.Core/New+Delete.cxx
+++ b/Public/Kits/System.Core/Sources/New+Delete.cxx
@@ -4,7 +4,22 @@
------------------------------------------- */
-#include <System.Core/Heap.hxx>
+#include <System.Core/Headers/Heap.hxx>
+
+#define kAllocationTypes 2
+
+enum HcAllocationKind {
+ kStandardAllocation = 0xC,
+ kArrayAllocation = 0xD,
+};
+
+CA_EXTERN_C PtrVoidType HcAllocateProcessHeap(ObjectPtr refObj, QWordType sz,
+ DWordType flags);
+CA_EXTERN_C BooleanType HcProcessHeapExists(ObjectPtr refObj, PtrVoidType ptr);
+CA_EXTERN_C QWordType HcProcessHeapSize(ObjectPtr refObj, PtrVoidType ptr);
+CA_EXTERN_C VoidType HcFreeProcessHeap(ObjectPtr refObj, PtrVoidType ptr);
+
+typedef SizeType size_t;
void* operator new[](size_t sz)
{
diff --git a/Public/Kits/System.Core/System.Core.hxx b/Public/Kits/System.Core/System.Core.hxx
deleted file mode 100644
index 96ab45be..00000000
--- a/Public/Kits/System.Core/System.Core.hxx
+++ /dev/null
@@ -1,14 +0,0 @@
-/** ===========================================
- (C) Mahrouss Logic
- ===========================================*/
-
-#pragma once
-
-/// Process Heap API
-#include <System.Core/Heap.hxx>
-
-/// File API & Device API.
-#include <System.Core/File.hxx>
-
-/// Process & Threading API
-#include <System.Core/Threading.hxx>
diff --git a/Public/Kits/System.Core/System.hxx b/Public/Kits/System.Core/System.hxx
deleted file mode 100644
index 05028d87..00000000
--- a/Public/Kits/System.Core/System.hxx
+++ /dev/null
@@ -1,18 +0,0 @@
-/*** ===========================================
- (C) Mahrouss Logic
- ===========================================*/
-
-#pragma once
-
-/** ---------------------------------------------------
-
- * THIS FILE CONTAINS CODE FOR THE STANDARD HCORE API.
-
-------------------------------------------------------- */
-
-#include <System.Core/Defs.hxx>
-#include <System.Core/File.hxx>
-#include <System.Core/Heap.hxx>
-#include <System.Core/Threading.hxx>
-
-using namespace HCore;
diff --git a/Public/Kits/System.Core/Threading.hxx b/Public/Kits/System.Core/Threading.hxx
deleted file mode 100644
index bddbbf3f..00000000
--- a/Public/Kits/System.Core/Threading.hxx
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
-------------------------------------------- */
-
-//
-// Created by Amlal on 3/18/24
-//
-
-#ifndef __THREAD_API__
-#define __THREAD_API__
-
-#include <System.Core/Defs.hxx>
-
-/// @brief Thread Information Block variant for scheduling.
-struct PACKED ThreadInformationBlock final {
- const UINT_PTR StartAddress; // Start Address
- const UINT_PTR StartHeap; // Allocation Heap
- const UINT_PTR StartStack; // Stack Pointer.
- const WORD ThreadID; // Execution Thread ID.
-};
-
-ThreadInformationBlock* HcCreateThread(_Input PVOID Start,
- _Optional _InOut PVOID HeapOpt,
- _Optional _InOut PVOID StackOpt);
-
-BOOL HcDestroyThread(_Input ThreadInformationBlock* TIB);
-
-BOOL HcStopThread(_Input ThreadInformationBlock* TIB);
-
-BOOL HcResumeThread(_Input ThreadInformationBlock* TIB);
-
-#endif // __THREAD_API__