#include #include #include #include #include #include #include #include #include #include #include struct flanterm_context* ft_ctx; void* ft_malloc (size_t n) { return malloc (n); } void ft_free (void* ptr, size_t size) { (void)size; free (ptr); } DEFINE_DEVICE_INIT (terminal_init) { struct limine_framebuffer_response* fb_r = limine_framebuffer_request.response; struct limine_framebuffer* fb = fb_r->framebuffers[0]; ft_ctx = flanterm_fb_init (&ft_malloc, &ft_free, fb->address, fb->width, fb->height, fb->pitch, fb->red_mask_size, fb->red_mask_shift, fb->green_mask_size, fb->green_mask_shift, fb->blue_mask_size, fb->blue_mask_shift, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 1, 0, 0, 0, 0); return true; } DEFINE_DEVICE_FINI (terminal_fini) {} DEFINE_DEVICE_OP (terminal_putstr) { char* string = (char*)a1; size_t* len = (size_t*)a2; if (string == NULL || len == NULL) return -ST_BAD_ADDRESS_SPACE; flanterm_write (ft_ctx, string, *len); return ST_OK; } DEFINE_DEVICE_OP (terminal_dimensions) { if (a1 == NULL || a2 == NULL) return -ST_BAD_ADDRESS_SPACE; flanterm_get_dimensions (ft_ctx, (size_t*)a1, (size_t*)a2); return ST_OK; }