Fast and reasonably complete (framebuffer) terminal emulator (Zig fork)
1#ifndef _TERM_FRAMEBUFFER_H
2#define _TERM_FRAMEBUFFER_H
3
4#include <stdint.h>
5#include <stddef.h>
6#include <stdbool.h>
7
8#include "../term.h"
9
10#define FBTERM_FONT_GLYPHS 256
11
12struct fbterm_char {
13 uint32_t c;
14 uint32_t fg;
15 uint32_t bg;
16};
17
18struct fbterm_queue_item {
19 size_t x, y;
20 struct fbterm_char c;
21};
22
23struct fbterm_context {
24 struct term_context term;
25
26 size_t font_width;
27 size_t font_height;
28 size_t glyph_width;
29 size_t glyph_height;
30
31 size_t font_scale_x;
32 size_t font_scale_y;
33
34 size_t offset_x, offset_y;
35
36 volatile uint32_t *framebuffer;
37 size_t pitch;
38 size_t width;
39 size_t height;
40 size_t bpp;
41
42 size_t font_bits_size;
43 uint8_t *font_bits;
44 size_t font_bool_size;
45 bool *font_bool;
46
47 uint32_t ansi_colours[8];
48 uint32_t ansi_bright_colours[8];
49 uint32_t default_fg, default_bg;
50
51 size_t canvas_size;
52 uint32_t *canvas;
53
54 size_t grid_size;
55 size_t queue_size;
56 size_t map_size;
57
58 struct fbterm_char *grid;
59
60 struct fbterm_queue_item *queue;
61 size_t queue_i;
62
63 struct fbterm_queue_item **map;
64
65 uint32_t text_fg;
66 uint32_t text_bg;
67 bool cursor_status;
68 size_t cursor_x;
69 size_t cursor_y;
70
71 uint32_t saved_state_text_fg;
72 uint32_t saved_state_text_bg;
73 size_t saved_state_cursor_x;
74 size_t saved_state_cursor_y;
75
76 size_t old_cursor_x;
77 size_t old_cursor_y;
78};
79
80struct term_context *fbterm_init(
81 void *(*_malloc)(size_t),
82 uint32_t *framebuffer, size_t width, size_t height, size_t pitch,
83 uint32_t *canvas,
84 uint32_t *ansi_colours, uint32_t *ansi_bright_colours,
85 uint32_t *default_bg, uint32_t *default_fg,
86 void *font, size_t font_width, size_t font_height, size_t font_spacing,
87 size_t font_scale_x, size_t font_scale_y,
88 size_t margin
89);
90
91#endif