vxBoot/src/terminal/open.c

48 lines
1.3 KiB
C

#include "vxBoot/terminal.h"
#include <gint/display.h>
#include <gint/timer.h>
#include <string.h>
#include <stdlib.h>
/* internal symbols */
struct terminal terminal;
/* terminal_open(): Initialize and open the terminal */
int terminal_open(void)
{
if (terminal.private.watermark == TERM_PRIVATE_WATERMARK)
terminal_close();
memset(&terminal, 0x00, sizeof(struct terminal));
terminal.private.timer.id = -1;
terminal.winsize.ws_xpixel = DWIDTH;
terminal.winsize.ws_ypixel = DHEIGHT;
terminal.winsize.ft_xpixel = FWIDTH + 1;
terminal.winsize.ft_ypixel = FHEIGHT + 1;
terminal.winsize.ws_col = DWIDTH / terminal.winsize.ft_xpixel;
terminal.winsize.ws_row = DHEIGHT / terminal.winsize.ft_ypixel;
terminal.buffer.size = terminal.winsize.ws_row
* terminal.winsize.ws_col
* TERM_RDBUFFER_NBLINE
* sizeof(uint8_t);
terminal.buffer.data = calloc(1, terminal.buffer.size);
if (terminal.buffer.data == NULL) {
terminal_close();
return (-1);
}
terminal.private.timer.id = timer_configure(
TIMER_ANY,
250000,
GINT_CALL(terminal_cursor_handler)
);
if (terminal.private.timer.id < 0) {
terminal_close();
return (-1);
}
terminal.private.color.bg = C_BLACK;
terminal.private.color.fg = C_WHITE;
terminal.private.watermark = TERM_PRIVATE_WATERMARK;
return (0);
}