diff options
Diffstat (limited to 'fs/stdstreams.c')
| -rw-r--r-- | fs/stdstreams.c | 56 |
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); +} |
