summaryrefslogtreecommitdiff
path: root/fs/stdstreams.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/stdstreams.c')
-rw-r--r--fs/stdstreams.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/fs/stdstreams.c b/fs/stdstreams.c
new file mode 100644
index 0000000..1cb9402
--- /dev/null
+++ b/fs/stdstreams.c
@@ -0,0 +1,56 @@
+#include <stddef.h>
+
+#include "fd.h"
+#include "terminal.h"
+#include "screen.h"
+#include "vesa.h"
+
+#include "kmalloc.h"
+
+fd fd_from_term()
+{
+ uint8_t *mem=kballoc(1);
+ term_out *screen=mem;
+ terminal_tty *tty1=mem+sizeof(term_out);
+ fifo *fif=tty1+sizeof(terminal_tty);
+
+ screen->put_char=console_put_char;
+ screen->update_cursor=update_cursor;
+
+ *tty1=terminal_init(screen,NULL);
+
+ fif->data=tty1;
+ fif->put=terminal_put;
+
+ return fd_from_fifo(fif);
+}
+
+fd fd_from_fb_term()
+{
+ uint8_t *mem=kballoc(1);
+ term_out *screen=mem;
+ terminal_tty *tty1=mem+sizeof(term_out);
+ fifo *fif=tty1+sizeof(terminal_tty);
+
+ screen->put_char=vesa_console_put_char;
+ screen->update_cursor=vesa_update_cursor;
+
+ *tty1=terminal_init(screen,NULL);
+
+ fif->data=tty1;
+ fif->put=terminal_put;
+
+ return fd_from_fifo(fif);
+}
+
+fd fd_from_ringbuffer()
+{
+ fifo *f=kballoc(1);
+ ringbuffer *r=kballoc(1);
+ *r=ringbuffer_init(1);
+ f->data=r;
+ f->put=ringbuffer_put;
+ f->get=ringbuffer_get;
+ f->has=ringbuffer_has;
+ return fd_from_fifo(f);
+}