summaryrefslogtreecommitdiff
path: root/Source/Library/Userland
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-10-18 21:56:26 +0200
committerAlexis211 <alexis211@gmail.com>2009-10-18 21:56:26 +0200
commit0cca2d68451849b5ea96a3620566fd0b42dde3c0 (patch)
treefcdcaace870a59d0b8f2ccc6abb8418763960dbe /Source/Library/Userland
parent776753bfa0c411f4b1a5680409104904961fcbeb (diff)
downloadMelon-0cca2d68451849b5ea96a3620566fd0b42dde3c0.tar.gz
Melon-0cca2d68451849b5ea96a3620566fd0b42dde3c0.zip
More work on syscalls
Diffstat (limited to 'Source/Library/Userland')
-rw-r--r--Source/Library/Userland/Binding/VirtualTerminal.class.h11
-rw-r--r--Source/Library/Userland/Start.cpp3
-rw-r--r--Source/Library/Userland/Syscall/RessourceCaller.class.h11
-rw-r--r--Source/Library/Userland/common.h1
4 files changed, 25 insertions, 1 deletions
diff --git a/Source/Library/Userland/Binding/VirtualTerminal.class.h b/Source/Library/Userland/Binding/VirtualTerminal.class.h
index a7bb4c2..67683b8 100644
--- a/Source/Library/Userland/Binding/VirtualTerminal.class.h
+++ b/Source/Library/Userland/Binding/VirtualTerminal.class.h
@@ -2,6 +2,7 @@
#include <VirtualTerminal.iface.h>
+#include <String.class.h>
#include <WChar.class.h>
class VirtualTerminal : public RessourceCaller {
@@ -15,6 +16,16 @@ class VirtualTerminal : public RessourceCaller {
void writeHex(u32int number) {
doCall(VT_IFACE_WRITEHEX, number);
}
+ void writeDec(s64int number) {
+ doCall(VT_IFACE_WRITEDEC, (number >> 32), number);
+ }
+ void write(String s) {
+ Serialized a = s.serialize();
+ doCall(VT_IFACE_WRITE, a);
+ }
+ String readLine() {
+ return String::unserialize(doCall(VT_IFACE_READLINE));
+ }
void put(WChar c) {
doCall(VT_IFACE_PUT, c);
diff --git a/Source/Library/Userland/Start.cpp b/Source/Library/Userland/Start.cpp
index e185189..639210f 100644
--- a/Source/Library/Userland/Start.cpp
+++ b/Source/Library/Userland/Start.cpp
@@ -18,7 +18,7 @@ extern "C" void start() {
((void (*)(void))*call)();
}
- heap.create(0x40000000, 0x00100000, 0x00003000); //Initially create a 1M heap with 12ko index
+ heap.create(0x40000000, 0x00100000, 0x00004000); //Initially create a 1M heap with 16ko index
u32int r = main();
//Call static destructors
@@ -32,4 +32,5 @@ extern "C" void start() {
namespace Mem {
void* alloc (u32int sz) { return heap.alloc(sz); }
void free(void* ptr) { heap.free(ptr); }
+ void* mkXchgSpace (u32int sz) { return alloc(sz); }
}
diff --git a/Source/Library/Userland/Syscall/RessourceCaller.class.h b/Source/Library/Userland/Syscall/RessourceCaller.class.h
index 3ad8900..3602ef0 100644
--- a/Source/Library/Userland/Syscall/RessourceCaller.class.h
+++ b/Source/Library/Userland/Syscall/RessourceCaller.class.h
@@ -2,6 +2,17 @@
#define DEF_RESSOURCECALLER_CLASS_H
#include <Syscall/Syscall.wtf.h>
+#include <common.h>
+
+class Serialized {
+ private:
+ u32int m_value;
+
+ public:
+ Serialized(u32int v) : m_value(v) {}
+ ~Serialized() { Mem::free( (void*)m_value); }
+ operator u32int () { return m_value; }
+};
class RessourceCaller {
private:
diff --git a/Source/Library/Userland/common.h b/Source/Library/Userland/common.h
index 3508513..6257841 100644
--- a/Source/Library/Userland/common.h
+++ b/Source/Library/Userland/common.h
@@ -10,6 +10,7 @@
namespace Mem {
void* alloc(u32int);
void free(void*);
+ void* mkXchgSpace(u32int sz);
}
//Standard implemenations of operator new/delete