From 9836acd720988af30250c2c1ec18d618664dea4e Mon Sep 17 00:00:00 2001 From: Alexis211 Date: Tue, 20 Oct 2009 19:21:34 +0200 Subject: Started working on a userland shell This means I'll have to do syscalls for everything I need. --- Source/Library/Common/String.class.cpp | 2 +- Source/Library/Common/String.class.h | 2 +- Source/Library/Interface/FSNode.iface.h | 14 +++++++++++++ Source/Library/Userland/Binding/FSNode.class.h | 23 ++++++++++++++++++++++ .../Userland/Binding/VirtualTerminal.class.h | 6 +++++- 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 Source/Library/Interface/FSNode.iface.h create mode 100644 Source/Library/Userland/Binding/FSNode.class.h (limited to 'Source/Library') diff --git a/Source/Library/Common/String.class.cpp b/Source/Library/Common/String.class.cpp index c217807..ac0eba0 100644 --- a/Source/Library/Common/String.class.cpp +++ b/Source/Library/Common/String.class.cpp @@ -60,7 +60,7 @@ String String::unserialize(u32int w) { return ret; } -u32int String::serialize() { +u32int String::serialize() const { u32int* x = (u32int*)Mem::mkXchgSpace((m_length + 1) * sizeof(u32int)); x[0] = m_length; for (u32int i = 0; i < m_length; i++) { diff --git a/Source/Library/Common/String.class.h b/Source/Library/Common/String.class.h index 5db9858..0d48ce6 100644 --- a/Source/Library/Common/String.class.h +++ b/Source/Library/Common/String.class.h @@ -10,7 +10,7 @@ class String : public BasicString { static String number(s32int number); static String unserialize(u32int w); - u32int serialize(); + u32int serialize() const; String(const char* string, u8int encoding = UE_UTF8); String() : BasicString() {} diff --git a/Source/Library/Interface/FSNode.iface.h b/Source/Library/Interface/FSNode.iface.h new file mode 100644 index 0000000..482ebd2 --- /dev/null +++ b/Source/Library/Interface/FSNode.iface.h @@ -0,0 +1,14 @@ +#ifndef DEF_FSNODE_IFACE_H +#define DEF_FSNODE_IFACE_H + +#define FNIF_OBJTYPE 0x14 + +//S : static, GET : get, R : root, FN : fsnode +#define FNIF_SGETRFN 0 + +#define FNIF_GETNAME 0x10 +#define FNIF_TYPE 0x11 +#define FNIF_GETPARENT 0x12 +#define FNIF_GETLENGTH 0x13 + +#endif diff --git a/Source/Library/Userland/Binding/FSNode.class.h b/Source/Library/Userland/Binding/FSNode.class.h new file mode 100644 index 0000000..eb25782 --- /dev/null +++ b/Source/Library/Userland/Binding/FSNode.class.h @@ -0,0 +1,23 @@ +#include +#include + +class FSNode : public RessourceCaller { + public: + static FSNode getRoot() { + return FSNode(RessourceCaller::sCall(FNIF_OBJTYPE, FNIF_SGETRFN)); + } + FSNode(u32int id) : RessourceCaller(id, FNIF_OBJTYPE) {} + + String getName() { + return String::unserialize(doCall(FNIF_GETNAME)); + } + u8int type() { + return doCall(FNIF_TYPE); + } + FSNode getParent() { + return FSNode(doCall(FNIF_GETPARENT)); + } + u64int getLength() { + return *((u64int*)doCall(FNIF_GETLENGTH)); + } +}; diff --git a/Source/Library/Userland/Binding/VirtualTerminal.class.h b/Source/Library/Userland/Binding/VirtualTerminal.class.h index 0da1be4..9d438c6 100644 --- a/Source/Library/Userland/Binding/VirtualTerminal.class.h +++ b/Source/Library/Userland/Binding/VirtualTerminal.class.h @@ -37,8 +37,12 @@ class VirtualTerminal : public RessourceCaller { bool isBoxed() { return doCall(VTIF_ISBOXED) != 0; } - void put(WChar c) { doCall(VTIF_PUT, c); } + + inline VirtualTerminal& operator<<(const String& s) { write(s); return *this; } + inline VirtualTerminal& operator<<(s32int i) { writeDec(i); return *this; } + inline VirtualTerminal& operator<<(s64int i) { writeDec(i); return *this; } + inline VirtualTerminal& operator<<(u32int i) { writeHex(i); return *this; } }; -- cgit v1.2.3