summaryrefslogtreecommitdiff
path: root/fs/stdstreams.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-20 20:51:57 +0200
committerMiguel <m.i@gmx.at>2018-09-20 20:51:57 +0200
commitaeefdb37d1fc1c0eb7953b9c196cab09460bc167 (patch)
tree513789d7fd28b65afb594e9605975bd10ea06f74 /fs/stdstreams.c
parent763f85c55fdb5a2c4f5bf98e4989a69d27da6e4f (diff)
we are now prepared for piping with _pipe and _dup2
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);
+}