Index: fb/fb.c
===================================================================
--- fb/fb.c	(revision bf9afa074efbd8c197ed9e69b254042671b05ce9)
+++ fb/fb.c	(revision 83b1d615e01e930ba02ee27fc2052aec9aa5a60c)
@@ -41,7 +41,10 @@
 #include <kernel/errno.h>
 #include <async.h>
+
 #include "font-8x16.h"
 #include "helenos.xbm"
 #include "fb.h"
+#include "main.h"
+#include "../console/screenbuffer.h"
 
 #define DEFAULT_BGCOLOR                0x000080
@@ -459,4 +462,20 @@
 }
 
+static void draw_text_data(int vp, keyfield_t *data)
+{
+	viewport_t *vport = &viewports[vp];
+	int i;
+	char c;
+
+	clear_port(vp);
+	for (i=0; i < vport->cols * vport->rows; i++) {
+		if (data[i].character == ' ') /* TODO: && data[i].style==vport->style */
+			continue;
+		draw_char(vp, data[i].character, i/vport->rows, i % vport->cols);
+	}
+	cursor_print(vp);
+}
+
+
 /** Function for handling connections to FB
  *
@@ -470,4 +489,6 @@
 	unsigned int row,col;
 	char c;
+	keyfield_t *interbuffer = NULL;
+	size_t intersize = 0;
 
 	int vp = 0;
@@ -495,4 +516,23 @@
 			ipc_answer_fast(callid,0,0,0);
 			return; /* Exit thread */
+		case IPC_M_AS_AREA_SEND:
+			/* We accept one area for data interchange */
+			intersize = IPC_GET_ARG2(call);
+			receive_comm_area(callid,&call,(void **)&interbuffer,
+					  sizeof(*interbuffer)*viewports[0].cols*viewports[0].rows);
+			continue;
+
+		case FB_DRAW_TEXT_DATA:
+			if (!interbuffer) {
+				retval = EINVAL;
+				break;
+			}
+			if (intersize < vport->cols*vport->rows*sizeof(*interbuffer)) {
+				retval = EINVAL;
+				break;
+			}
+			draw_text_data(vp, interbuffer);
+			retval = 0;
+			break;
 		case FB_PUTCHAR:
 			c = IPC_GET_ARG1(call);
Index: fb/main.c
===================================================================
--- fb/main.c	(revision bf9afa074efbd8c197ed9e69b254042671b05ce9)
+++ fb/main.c	(revision 83b1d615e01e930ba02ee27fc2052aec9aa5a60c)
@@ -31,8 +31,31 @@
 #include <sysinfo.h>
 #include <async.h>
+#include <as.h>
+#include <align.h>
+#include <errno.h>
 
 #include "fb.h"
 #include "sysio.h"
 #include "ega.h"
+#include "main.h"
+
+void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
+		       size_t maxsize)
+{
+	void *dest;
+
+	if (*area) {
+		ipc_answer_fast(callid, ELIMIT, 0, 0);
+		return;
+	}
+	if (IPC_GET_ARG2(*call) > ALIGN_UP(maxsize, PAGE_SIZE)) {
+		ipc_answer_fast(callid, EINVAL, 0, 0);
+		return;
+	}
+	
+	dest = as_get_mappable_page(maxsize);
+	if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0)
+		*area = dest;
+}
 
 int main(int argc, char *argv[])
Index: fb/main.h
===================================================================
--- fb/main.h	(revision 83b1d615e01e930ba02ee27fc2052aec9aa5a60c)
+++ fb/main.h	(revision 83b1d615e01e930ba02ee27fc2052aec9aa5a60c)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2006 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MAIN_H_
+#define __MAIN_H_
+
+void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
+		       size_t maxsize);
+
+#endif
