<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>UserIPC.cpp</filename>
    </added>
    <added>
      <filename>inc/UserIPC.hpp</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,7 @@
 #include &lt;Syscall.hpp&gt;
 #include &lt;Akari.hpp&gt;
 #include &lt;UserCalls.hpp&gt;
+#include &lt;UserIPC.hpp&gt;
 #include &lt;Descriptor.hpp&gt;
 
 Syscall::Syscall(): _syscalls_assigned(0) {
@@ -13,19 +14,22 @@ Syscall::Syscall(): _syscalls_assigned(0) {
 	addSyscall(4, (void *)&amp;User::irqWait);
 	addSyscall(5, (void *)&amp;User::irqListen);
 	addSyscall(6, (void *)&amp;User::panic);
-	addSyscall(7, (void *)&amp;User::registerName);
-	addSyscall(8, (void *)&amp;User::registerStream);
-	addSyscall(9, (void *)&amp;User::exit);
-	addSyscall(10, (void *)&amp;User::obtainStreamWriter);
-	addSyscall(11, (void *)&amp;User::obtainStreamListener);
-	addSyscall(12, (void *)&amp;User::readStream);
-	addSyscall(13, (void *)&amp;User::readStreamUnblock);
-	addSyscall(14, (void *)&amp;User::writeStream);
-	addSyscall(15, (void *)&amp;User::defer);
-	addSyscall(16, (void *)&amp;User::malloc);
-	addSyscall(17, (void *)&amp;User::free);
-	addSyscall(18, (void *)&amp;User::memcpy);
-	addSyscall(19, (void *)&amp;User::registerQueue);
+	addSyscall(7, (void *)&amp;User::exit);
+	addSyscall(8, (void *)&amp;User::defer);
+	addSyscall(9, (void *)&amp;User::malloc);
+	addSyscall(10, (void *)&amp;User::free);
+	addSyscall(11, (void *)&amp;User::memcpy);
+
+	addSyscall(12, (void *)&amp;User::IPC::registerName);
+
+	addSyscall(13, (void *)&amp;User::IPC::registerStream);
+	addSyscall(14, (void *)&amp;User::IPC::obtainStreamWriter);
+	addSyscall(15, (void *)&amp;User::IPC::obtainStreamListener);
+	addSyscall(16, (void *)&amp;User::IPC::readStream);
+	addSyscall(17, (void *)&amp;User::IPC::readStreamUnblock);
+	addSyscall(18, (void *)&amp;User::IPC::writeStream);
+
+	addSyscall(19, (void *)&amp;User::IPC::registerQueue);
 }
 
 u8 Syscall::versionMajor() const { return 0; }</diff>
      <filename>Syscall.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -118,6 +118,11 @@ void ATAProcess() {
 
 	if (!SYSCALL_BOOL(syscall_registerQueue(&quot;command&quot;)))
 		syscall_panic(&quot;could not register system.io.ata:command&quot;);
+
+	syscall_puts(&quot;ATA driver entering loop\n&quot;);
+	while (true) {
+
+	}
 }
 
 void ata_read_data(u32 sector_offset, u16 offset, u32 length, u8 *buffer)</diff>
      <filename>TmpATA.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -73,10 +73,10 @@ void KeyboardProcess() {
 	if (!SYSCALL_BOOL(syscall_registerName(&quot;system.io.keyboard&quot;)))
 		syscall_panic(&quot;could not register system.io.keyboard&quot;);
 
-	if (!SYSCALL_BOOL(syscall_registerNode(&quot;input&quot;)))
+	if (!SYSCALL_BOOL(syscall_registerStream(&quot;input&quot;)))
 		syscall_panic(&quot;could not register system.io.keyboard:input&quot;);
 
-	u32 writer = syscall_obtainNodeWriter(&quot;system.io.keyboard&quot;, &quot;input&quot;, true);
+	u32 writer = syscall_obtainStreamWriter(&quot;system.io.keyboard&quot;, &quot;input&quot;, true);
 	if (writer == (u32)-1) {
 		// This shouldn't be possible if we just initialised the damn thing.
 		syscall_panic(&quot;could not obtain writer on system.io.keyboard:input&quot;);
@@ -127,7 +127,7 @@ void KeyboardProcess() {
 					syscall_putc(scancode);
 
 				// Now actually dispatch this.
-				syscall_writeNode(&quot;system.io.keyboard&quot;, &quot;input&quot;, writer, (const char *)&amp;scancode, 1);
+				syscall_writeStream(&quot;system.io.keyboard&quot;, &quot;input&quot;, writer, (const char *)&amp;scancode, 1);
 			}
 
 			if (mustUpdateLEDs) {</diff>
      <filename>TmpKb.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ static char *getline(u32 in) {
 	char *kbbuf = (char *)syscall_malloc(cs);
 
 	while (true) {
-		u32 incoming = syscall_readNode(&quot;system.io.keyboard&quot;, &quot;input&quot;, in, kbbuf + n, 1);
+		u32 incoming = syscall_readStream(&quot;system.io.keyboard&quot;, &quot;input&quot;, in, kbbuf + n, 1);
 		syscall_putc(kbbuf[n]);
 		if (kbbuf[n] == '\n') break;
 
@@ -60,7 +60,7 @@ int strpos(const char *haystack, const char *needle) {
 void ShellProcess() {
 	u32 stdin = (u32)-1;
 	while (stdin == (u32)-1) {
-		stdin = syscall_obtainNodeListener(&quot;system.io.keyboard&quot;, &quot;input&quot;);
+		stdin = syscall_obtainStreamListener(&quot;system.io.keyboard&quot;, &quot;input&quot;);
 	}
 
 	syscall_puts(&quot;\nstdin is 0x&quot;);</diff>
      <filename>TmpShell.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@
 #include &lt;Console.hpp&gt;
 #include &lt;Tasks.hpp&gt;
 #include &lt;Syscall.hpp&gt;
-
+#include &lt;BlockingCall.hpp&gt;
 
 namespace User {
 	void putc(char c) {
@@ -49,52 +49,6 @@ namespace User {
 		AkariPanic(s);
 	}
 
-	bool registerName(const char *name) {
-		Symbol sName(name);
-		if (Akari-&gt;tasks-&gt;registeredTasks-&gt;hasKey(sName))
-			return false;
-
-		(*Akari-&gt;tasks-&gt;registeredTasks)[sName] = Akari-&gt;tasks-&gt;current;
-		Akari-&gt;tasks-&gt;current-&gt;registeredName = sName;
-		return true;
-	}
-
-	bool registerStream(const char *name) {
-		Symbol sNode(name);
-		if (!Akari-&gt;tasks-&gt;current-&gt;registeredName) {
-			// TODO: just kill the process, don't kill the system.
-			// TODO: is this correct behaviour? Or could we have registered nodes
-			// on no particular name? Why not?.. think about it.
-			AkariPanic(&quot;name not registered - cannot register node&quot;);
-		}
-
-		if (Akari-&gt;tasks-&gt;current-&gt;streamsByName-&gt;hasKey(name)) {
-			AkariPanic(&quot;node already registered - cannot register atop it&quot;);
-		}
-
-		Tasks::Task::Stream *target = new Tasks::Task::Stream();
-
-		(*Akari-&gt;tasks-&gt;current-&gt;streamsByName)[sNode] = target;
-		return true;
-	}
-
-	bool registerQueue(const char *name) {
-		Symbol sNode(name);
-		if (!Akari-&gt;tasks-&gt;current-&gt;registeredName) {
-			// TODO
-			AkariPanic(&quot;name not registered - cannot register node&quot;);
-		}
-
-		if (Akari-&gt;tasks-&gt;current-&gt;streamsByName-&gt;hasKey(name)) {
-			AkariPanic(&quot;node already registered - cannot register atop it&quot;);
-		}
-
-		Tasks::Task::Queue *target = new Tasks::Task::Queue();
-
-		(*Akari-&gt;tasks-&gt;current-&gt;queuesByName)[sNode] = target;
-		return true;
-	}
-
 	void exit() {
 		Akari-&gt;syscall-&gt;returnToNextTask();
 		// Find the Task* which refers to Akari-&gt;tasks-&gt;current, and get it to skip it.
@@ -113,65 +67,6 @@ namespace User {
 		// Gone! XXX what happens when the last task exists!? Everything probably goes to hell ...
 	}
 
-	static inline Tasks::Task::Stream *getStream(const char *name, const char *node) {
-		Symbol sName(name), sNode(node);
-
-		if (!Akari-&gt;tasks-&gt;registeredTasks-&gt;hasKey(sName))
-			return 0;
-
-		Tasks::Task *task = (*Akari-&gt;tasks-&gt;registeredTasks)[sName];
-		if (!task-&gt;streamsByName-&gt;hasKey(sNode))
-			return 0;
-
-		return (*task-&gt;streamsByName)[sNode];
-	}
-
-	u32 obtainStreamWriter(const char *name, const char *node, bool exclusive) {
-		Tasks::Task::Stream *target = getStream(name, node);
-		if (!target) return -1;
-		return target-&gt;registerWriter(exclusive);
-	}
-
-	u32 obtainStreamListener(const char *name, const char *node) {
-		Tasks::Task::Stream *target = getStream(name, node);
-		if (!target) return -1;
-		return target-&gt;registerListener();
-	}
-
-	// Keeping in mind that `buffer''s data probably isn't asciz.
-	u32 readStream_impl(const char *name, const char *node, u32 listener, char *buffer, u32 n, bool block) {
-		ReadCall c(name, node, listener, buffer, n);
-		u32 r = c();
-		if (!block || !c.shallBlock())
-			return r;
-	
-		// block &amp;&amp; r.shallBlock()
-		// Block until such time as some data is available.
-		Tasks::Task::Stream::Listener *l = c.getListener();
-
-		Akari-&gt;tasks-&gt;current-&gt;userWaiting = true;
-		Akari-&gt;tasks-&gt;current-&gt;userCall = new ReadCall(c);
-		l-&gt;hook(Akari-&gt;tasks-&gt;current);
-		Akari-&gt;syscall-&gt;returnToNextTask();
-		return 0;
-	}
-
-	u32 readStream(const char *name, const char *node, u32 listener, char *buffer, u32 n) {
-		return readStream_impl(name, node, listener, buffer, n, true);
-	}
-
-	u32 readStreamUnblock(const char *name, const char *node, u32 listener, char *buffer, u32 n) {
-		return readStream_impl(name, node, listener, buffer, n, false);
-	}
-	u32 writeStream(const char *name, const char *node, u32 writer, const char *buffer, u32 n) {
-		Tasks::Task::Stream *target = getStream(name, node);
-		if (!target || !target-&gt;hasWriter(writer)) return -1;
-
-		// We do have a writer, so we can go ahead and write to all listeners.
-		target-&gt;writeAllListeners(buffer, n);
-		return n;		// what else?!
-	}
-
 	void defer() {
 		Akari-&gt;syscall-&gt;returnToNextTask();
 	}
@@ -194,33 +89,5 @@ namespace User {
 			*w++ = *r++;
 		return dest;
 	}
-
-    ReadCall::ReadCall(const char *name, const char *node, u32 listener, char *buffer, u32 n):
-		_listener(&amp;getStream(name, node)-&gt;getListener(listener)), _buffer(buffer), _n(n)
-	{ }
-
-	Tasks::Task::Stream::Listener *ReadCall::getListener() const {
-		return _listener;
-	}
-
-	u32 ReadCall::operator ()() {
-		if (_n == 0) {
-			_wontBlock();
-			return 0;
-		}
-
-		u32 len = _listener-&gt;length();
-		if (len == 0) {
-			_willBlock();
-			return 0;
-		}
-		
-		if (len &gt; _n) len = _n;
-		POSIX::memcpy(_buffer, _listener-&gt;view(), len);
-		_listener-&gt;cut(len);
-
-		_wontBlock();
-		return len;
-	}
 }
 </diff>
      <filename>UserCalls.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -51,16 +51,19 @@ DEFN_SYSCALL0(getProcessId, 3);
 DEFN_SYSCALL0(irqWait, 4);
 DEFN_SYSCALL1(irqListen, 5, u32);
 DEFN_SYSCALL1(panic, 6, const char *);
-DEFN_SYSCALL1(registerName, 7, const char *);
-DEFN_SYSCALL1(registerNode, 8, const char *);
-DEFN_SYSCALL0(exit, 9);
-DEFN_SYSCALL3(obtainNodeWriter, 10, const char *, const char *, bool);
-DEFN_SYSCALL2(obtainNodeListener, 11, const char *, const char *);
-DEFN_SYSCALL5(readNode, 12, const char *, const char *, u32, char *, u32);
-DEFN_SYSCALL5(readNodeUnblock, 13, const char *, const char *, u32, char *, u32);
-DEFN_SYSCALL5(writeNode, 14, const char *, const char *, u32, const char *, u32);
-DEFN_SYSCALL0(defer, 15);
-DEFN_SYSCALL1(malloc, 16, u32);
-DEFN_SYSCALL1(free, 17, void *);
-DEFN_SYSCALL3(memcpy, 18, void *, const void *, u32);
+DEFN_SYSCALL0(exit, 7);
+DEFN_SYSCALL0(defer, 8);
+DEFN_SYSCALL1(malloc, 9, u32);
+DEFN_SYSCALL1(free, 10, void *);
+DEFN_SYSCALL3(memcpy, 11, void *, const void *, u32);
+
+DEFN_SYSCALL1(registerName, 12, const char *);
+
+DEFN_SYSCALL1(registerStream, 13, const char *);
+DEFN_SYSCALL3(obtainStreamWriter, 14, const char *, const char *, bool);
+DEFN_SYSCALL2(obtainStreamListener, 15, const char *, const char *);
+DEFN_SYSCALL5(readStream, 16, const char *, const char *, u32, char *, u32);
+DEFN_SYSCALL5(readStreamUnblock, 17, const char *, const char *, u32, char *, u32);
+DEFN_SYSCALL5(writeStream, 18, const char *, const char *, u32, const char *, u32);
+
 DEFN_SYSCALL1(registerQueue, 19, const char *);</diff>
      <filename>UserGates.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -2,9 +2,7 @@
 #define __USER_CALLS_HPP__
 
 #include &lt;arch.hpp&gt;
-#include &lt;Symbol.hpp&gt;
 #include &lt;Tasks.hpp&gt;
-#include &lt;BlockingCall.hpp&gt;
 
 namespace User {
 	void putc(char c);
@@ -14,33 +12,11 @@ namespace User {
 	void irqWait();
 	void irqListen(u32 irq);
 	void panic(const char *s);
-	bool registerName(const char *name);
-	bool registerStream(const char *name);
-	bool registerQueue(const char *name);
 	void exit();
-	u32 obtainStreamWriter(const char *name, const char *node, bool exclusive);
-	u32 obtainStreamListener(const char *name, const char *node);
-	u32 readStream(const char *name, const char *node, u32 listener, char *buffer, u32 n);
-	u32 readStreamUnblock(const char *name, const char *node, u32 listener, char *buffer, u32 n);
-	u32 writeStream(const char *name, const char *node, u32 writer, const char *buffer, u32 n);
 	void defer();
 	void *malloc(u32 n);
 	void free(void *p);
 	void *memcpy(void *dest, const void *src, u32 n);
-
-	class ReadCall : public BlockingCall {
-	public:
-		ReadCall(const char *name, const char *node, u32 listener, char *buffer, u32 n);
-
-		Tasks::Task::Stream::Listener *getListener() const;
-
-		u32 operator ()();
-
-	protected:
-		Tasks::Task::Stream::Listener *_listener;
-		char *_buffer;
-		u32 _n;
-	};
 }
 
 #endif</diff>
      <filename>inc/UserCalls.hpp</filename>
    </modified>
    <modified>
      <diff>@@ -19,18 +19,21 @@ DECL_SYSCALL0(getProcessId);
 DECL_SYSCALL0(irqWait);
 DECL_SYSCALL1(irqListen, u32);
 DECL_SYSCALL1(panic, const char *);
-DECL_SYSCALL1(registerName, const char *);
-DECL_SYSCALL1(registerNode, const char *);
 DECL_SYSCALL0(exit);
-DECL_SYSCALL3(obtainNodeWriter, const char *, const char *, bool);
-DECL_SYSCALL2(obtainNodeListener, const char *, const char *);
-DECL_SYSCALL5(readNode, const char *, const char *, u32, char *, u32);
-DECL_SYSCALL5(readNodeUnblock, const char *, const char *, u32, char *, u32);
-DECL_SYSCALL5(writeNode, const char *, const char *, u32, const char *, u32);
 DECL_SYSCALL0(defer);
 DECL_SYSCALL1(malloc, u32);
 DECL_SYSCALL1(free, void *);
 DECL_SYSCALL3(memcpy, void *, const void *, u32);
+
+DECL_SYSCALL1(registerName, const char *);
+
+DECL_SYSCALL1(registerStream, const char *);
+DECL_SYSCALL3(obtainStreamWriter, const char *, const char *, bool);
+DECL_SYSCALL2(obtainStreamListener, const char *, const char *);
+DECL_SYSCALL5(readStream, const char *, const char *, u32, char *, u32);
+DECL_SYSCALL5(readStreamUnblock, const char *, const char *, u32, char *, u32);
+DECL_SYSCALL5(writeStream, const char *, const char *, u32, const char *, u32);
+
 DECL_SYSCALL1(registerQueue, const char *);
 
 #define SYSCALL_BOOL(x) ((bool)((x) &amp; 0xFF))</diff>
      <filename>inc/UserGates.hpp</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>eaed73dbbcc8cfb778edec21e8642a29cd4ce933</id>
    </parent>
  </parents>
  <author>
    <name>Arlen Cuss</name>
    <email>celtic@sairyx.org</email>
  </author>
  <url>http://github.com/celtic/akari/commit/f1431c27f62bd35caee306d3c13c7aeae272d93c</url>
  <id>f1431c27f62bd35caee306d3c13c7aeae272d93c</id>
  <committed-date>2009-11-06T22:26:51-08:00</committed-date>
  <authored-date>2009-11-06T22:26:51-08:00</authored-date>
  <message>Reworking the way I'm organising system calls, they're all getting a bit cramped in there. Now it doesn't work, fuck it.</message>
  <tree>7fdcc2f8caef069104b2e861884c9cf0652a7cb1</tree>
  <committer>
    <name>Arlen Cuss</name>
    <email>celtic@sairyx.org</email>
  </committer>
</commit>
