#pragma once
#include "uefi.h"

struct fb_info {
    uint64_t base;
    uint32_t width;
    uint32_t height;
    uint32_t pitch;      /* байтов на строку развёртки */
    uint32_t bpp;        /* байтов на пиксель */
    int      rgb;        /* 1 = RGB, 0 = BGR (порядок байтов) */
    uint32_t r_mask;     /* битовая маска красного (для BitMask формата) */
    uint32_t g_mask;     /* битовая маска зелёного */
    uint32_t b_mask;     /* битовая маска синего */
    uint32_t fg;         /* цвет текста по умолчанию */
    uint32_t bg;         /* цвет фона по умолчанию */
};

extern int kbd_layout; /* 0 = US, 1 = RU */

void fb_init(struct fb_info *info);
void fb_putchar_direct(int x, int y, unsigned char c, uint32_t fg, uint32_t bg);
void fb_putchar(char c);
void fb_puts(const char *s);
void fb_printf(const char *fmt, ...);
void fb_clear(void);
void fb_set_cursor(int col, int row);
void fb_get_cursor(int *col, int *row);
void fb_set_fg(uint32_t color);
void fb_set_bg(uint32_t color);
void fb_scroll(void);
void fb_readline(char *buf, int size);
void fb_rainbow(void);
char getchar(void);
char getchar_wait(void);
void fb_cursor_pixel(int show);

uint32_t make_color(uint8_t r, uint8_t g, uint8_t b);

extern struct fb_info fb;
