/ kernel / include / console.h
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