console.h
1 #ifndef CONSOLE_H 2 #define CONSOLE_H 3 4 #include "types.h" 5 #include "vfs.h" 6 7 // Console limits 8 #define CONSOLE_MAX_LINES 25 9 #define CONSOLE_MAX_COLS 80 10 #define CONSOLE_BUFFER_SIZE 4096 11 #define CONSOLE_LINE_SIZE 256 12 13 // Console colors 14 #define CONSOLE_BLACK 0 15 #define CONSOLE_BLUE 1 16 #define CONSOLE_GREEN 2 17 #define CONSOLE_CYAN 3 18 #define CONSOLE_RED 4 19 #define CONSOLE_MAGENTA 5 20 #define CONSOLE_BROWN 6 21 #define CONSOLE_LIGHT_GREY 7 22 #define CONSOLE_DARK_GREY 8 23 #define CONSOLE_LIGHT_BLUE 9 24 #define CONSOLE_LIGHT_GREEN 10 25 #define CONSOLE_LIGHT_CYAN 11 26 #define CONSOLE_LIGHT_RED 12 27 #define CONSOLE_LIGHT_MAGENTA 13 28 #define CONSOLE_YELLOW 14 29 #define CONSOLE_WHITE 15 30 31 // Console flags 32 #define CONSOLE_ECHO (1 << 0) 33 #define CONSOLE_CANONICAL (1 << 1) 34 #define CONSOLE_SIGNAL (1 << 2) 35 36 // Console structure 37 typedef struct console { 38 // Screen buffer 39 uint16_t* video_memory; 40 uint32_t cursor_x; 41 uint32_t cursor_y; 42 uint8_t color; 43 44 // Line buffer for canonical mode 45 char line_buffer[CONSOLE_LINE_SIZE]; 46 uint32_t line_pos; 47 uint32_t line_len; 48 49 // Input buffer 50 char input_buffer[CONSOLE_BUFFER_SIZE]; 51 uint32_t input_start; 52 uint32_t input_end; 53 54 // Flags 55 uint32_t flags; 56 57 // VFS node 58 vfs_node_t* vfs_node; 59 } console_t; 60 61 // Console functions 62 void console_init(void); 63 void console_early_init(void); 64 void console_late_init(void); 65 void console_clear(void); 66 void console_putchar(char c); 67 void console_write(const char* data, size_t size); 68 void console_set_color(uint8_t foreground, uint8_t background); 69 void console_set_cursor(uint32_t x, uint32_t y); 70 void console_get_cursor(uint32_t* x, uint32_t* y); 71 72 // Line discipline 73 void console_handle_input(char c); 74 int console_read_line(char* buffer, size_t size); 75 int console_read(char* buffer, size_t size); 76 77 // Console device operations 78 uint32_t console_vfs_read(vfs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer); 79 uint32_t console_vfs_write(vfs_node_t* node, uint32_t offset, uint32_t size, uint8_t* buffer); 80 81 // Global console 82 extern console_t* system_console; 83 84 #endif // CONSOLE_H