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