summaryrefslogtreecommitdiff
path: root/Source/Kernel/VTManager
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-10-20 18:10:29 +0200
committerAlexis211 <alexis211@gmail.com>2009-10-20 18:10:29 +0200
commit866580161b826443bed3862b8315cefd505de37c (patch)
tree23c3f87fe43d82c47af01c908d8a056785f9217f /Source/Kernel/VTManager
parent0cca2d68451849b5ea96a3620566fd0b42dde3c0 (diff)
downloadMelon-866580161b826443bed3862b8315cefd505de37c.tar.gz
Melon-866580161b826443bed3862b8315cefd505de37c.zip
We now have call tables for ressources.
instead of adding calls to ressource in the constructor.
Diffstat (limited to 'Source/Kernel/VTManager')
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal-sc.proto.cpp30
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal.proto.cpp20
-rw-r--r--Source/Kernel/VTManager/VirtualTerminal.proto.h5
3 files changed, 44 insertions, 11 deletions
diff --git a/Source/Kernel/VTManager/VirtualTerminal-sc.proto.cpp b/Source/Kernel/VTManager/VirtualTerminal-sc.proto.cpp
index e0c6e8d..0a4e14b 100644
--- a/Source/Kernel/VTManager/VirtualTerminal-sc.proto.cpp
+++ b/Source/Kernel/VTManager/VirtualTerminal-sc.proto.cpp
@@ -5,17 +5,18 @@ u32int VirtualTerminal::writeHexSC(u32int number) {
return 0;
}
-u32int VirtualTerminal::writeSC(u32int wat) {
- write(String::unserialize(wat));
- return 0;
-}
-
u32int VirtualTerminal::writeDecSC(u32int n_hi, u32int n_lo) {
s64int n = ((u64int)n_hi << 32) | n_lo;
writeDec(n);
return 0;
}
+u32int VirtualTerminal::writeSC(u32int wat) {
+ String *s = (String*)wat;
+ write(*s);
+ return 0;
+}
+
u32int VirtualTerminal::putSC(u32int code) {
put(WChar(code));
return 0;
@@ -24,3 +25,22 @@ u32int VirtualTerminal::putSC(u32int code) {
u32int VirtualTerminal::readLineSC() {
return readLine().serialize();
}
+
+u32int VirtualTerminal::setColorSC(u32int x) {
+ setColor((x >> 8) & 0xFF, x & 0xFF);
+ return 0;
+}
+
+u32int VirtualTerminal::setCursorLineSC(u32int l) {
+ setCursorLine(l);
+ return 0;
+}
+
+u32int VirtualTerminal::setCursorColSC(u32int c) {
+ setCursorCol(c);
+ return 0;
+}
+
+u32int VirtualTerminal::isBoxedSC() {
+ return (isBoxed() ? 1 : 0);
+}
diff --git a/Source/Kernel/VTManager/VirtualTerminal.proto.cpp b/Source/Kernel/VTManager/VirtualTerminal.proto.cpp
index dfd8f84..348113d 100644
--- a/Source/Kernel/VTManager/VirtualTerminal.proto.cpp
+++ b/Source/Kernel/VTManager/VirtualTerminal.proto.cpp
@@ -4,13 +4,21 @@
#include <VirtualTerminal.iface.h>
+call_t VirtualTerminal::m_callTable[] = {
+ CALL1(VTIF_WRITEHEX, &VirtualTerminal::writeHexSC),
+ CALL2(VTIF_WRITEDEC, &VirtualTerminal::writeDecSC),
+ CALL1(VTIF_WRITE, &VirtualTerminal::writeSC),
+ CALL1(VTIF_PUT, &VirtualTerminal::putSC),
+ CALL0(VTIF_READLINE, &VirtualTerminal::readLineSC),
+ CALL1(VTIF_SETCOLOR, &VirtualTerminal::setColorSC),
+ CALL1(VTIF_SETCSRLINE, &VirtualTerminal::setCursorLineSC),
+ CALL1(VTIF_SETCSRCOL, &VirtualTerminal::setCursorColSC),
+ CALL0(VTIF_ISBOXED, &VirtualTerminal::isBoxedSC),
+ CALL0(0, 0)
+};
+
VirtualTerminal::VirtualTerminal() :
- Ressource(VT_IFACE_OBJTYPE), m_kbdMutex(false), m_kbdbuffMutex(false), m_kbdbuff() {
- addCall1(VT_IFACE_WRITEHEX, (call1)&VirtualTerminal::writeHexSC);
- addCall2(VT_IFACE_WRITEDEC, (call2)&VirtualTerminal::writeDecSC);
- addCall1(VT_IFACE_WRITE, (call1)&VirtualTerminal::writeSC);
- addCall1(VT_IFACE_PUT, (call1)&VirtualTerminal::putSC);
- addCall0(VT_IFACE_READLINE, (call0)&VirtualTerminal::readLineSC);
+ Ressource(VTIF_OBJTYPE, m_callTable), m_kbdMutex(false), m_kbdbuffMutex(false), m_kbdbuff() {
}
VirtualTerminal::~VirtualTerminal() {
diff --git a/Source/Kernel/VTManager/VirtualTerminal.proto.h b/Source/Kernel/VTManager/VirtualTerminal.proto.h
index b0cd224..c81cf1a 100644
--- a/Source/Kernel/VTManager/VirtualTerminal.proto.h
+++ b/Source/Kernel/VTManager/VirtualTerminal.proto.h
@@ -20,11 +20,16 @@ class VirtualTerminal : public Ressource {
Vector<Kbd::keypress_t> m_kbdbuff; //Key press events buffer
//SYSCALLS :
+ static call_t m_callTable[];
u32int writeHexSC(u32int);
u32int writeDecSC(u32int, u32int);
u32int writeSC(u32int);
u32int putSC(u32int);
u32int readLineSC();
+ u32int setColorSC(u32int);
+ u32int setCursorLineSC(u32int);
+ u32int setCursorColSC(u32int);
+ u32int isBoxedSC();
public:
VirtualTerminal();