112f719b7fc74298ce0fc640d69ef5553c07520d
[lunaix-os.git] / lunaix-os / hal / term / lcntls / ansi_cntl.c
1 /**
2  * @file ansi_cntl.c
3  * @author Lunaixsky (lunaxisky@qq.com)
4  * @brief Line controller slave that handle all non-POSIX control code or ANSI
5  * escape sequence
6  * @version 0.1
7  * @date 2023-11-25
8  *
9  * @copyright Copyright (c) 2023
10  *
11  */
12 #include <hal/term.h>
13 #include <usr/lunaix/term.h>
14
15 #define CTRL_MNEMO(chr) (chr - 'A' + 1)
16
17 static inline int
18 __ansi_actcontrol(struct term* termdev, struct linebuffer* lbuf, char chr)
19 {
20     struct rbuffer* cooked = lbuf->next;
21     switch (chr) {
22         default:
23             if ((int)chr < 32) {
24                 rbuffer_put(cooked, '^');
25                 chr += 64;
26             }
27             break;
28     }
29
30     return rbuffer_put(cooked, chr);
31 }
32
33 struct term_lcntl ansi_line_controller = {.process_and_put = __ansi_actcontrol};