diff options
| author | David Faulkner <[email protected]> | 2026-08-07 23:40:47 -0500 |
|---|---|---|
| committer | David Faulkner <[email protected]> | 2026-08-07 23:40:47 -0500 |
| commit | b3e9e62599532050fc776c5e8f076915b56c2235 (patch) | |
| tree | af252346106a61b18cc6fc6fdbd32e962d096f1c /esc.h | |
Import official C23 code examples for Modern C (Jens Gustedt, 2024)HEADupstream-importmain
- Add official C source files, Makefile, c23-fallback.h, and LICENSE
- Update README.md with study mirror notice
Diffstat (limited to 'esc.h')
| -rw-r--r-- | esc.h | 156 |
1 files changed, 156 insertions, 0 deletions
@@ -0,0 +1,156 @@ +#ifndef ESCAPE_H +#define ESCAPE_H 1 + +#include <stdio.h> + +#define ESC_CSI "\e[" +#define ESC_SS2 "\eN" +#define ESC_SS3 "\eO" +#define ESC_SCI "\eZ" +#define ESC_ROI "\e%" + +#define ESC_SAVE ESC_CSI "s" +#define ESC_RESTORE ESC_CSI "u" +#define ESC_HOME ESC_CSI "H" +#define ESC_CLRSCR ESC_CSI "1J" +#define ESC_CLEAR ESC_CSI "2K" +#define ESC_UP ESC_CSI "A" +#define ESC_DOWN ESC_CSI "B" +#define ESC_FRWD ESC_CSI "C" +#define ESC_BKWD ESC_CSI "D" +#define ESC_END ESC_CSI "F" +#define ESC_INSERT ESC_CSI "2~" +#define ESC_DELETE ESC_CSI "3~" +#define ESC_PGUP ESC_CSI "5~" +#define ESC_PGDOWN ESC_CSI "6~" + +// F1 to F4 are special +#define ESC_F1 ESC_SS3 "P" +#define ESC_F2 ESC_SS3 "Q" +#define ESC_F3 ESC_SS3 "R" +#define ESC_F4 ESC_SS3 "S" +#define ESC_S_F1 ESC_CSI "1;2P" +#define ESC_S_F2 ESC_CSI "1;2Q" +#define ESC_S_F3 ESC_CSI "1;2R" +#define ESC_S_F4 ESC_CSI "1;2S" +#define ESC_C_F1 ESC_CSI "1;5P" +#define ESC_C_F2 ESC_CSI "1;5Q" +#define ESC_C_F3 ESC_CSI "1;5R" +#define ESC_C_F4 ESC_CSI "1;5S" + +#define ESC_F5 ESC_CSI "15~" +#define ESC_F6 ESC_CSI "17~" +#define ESC_F7 ESC_CSI "18~" +#define ESC_F8 ESC_CSI "19~" +#define ESC_F9 ESC_CSI "20~" +#define ESC_F10 ESC_CSI "21~" +#define ESC_F11 ESC_CSI "23~" +#define ESC_F12 ESC_CSI "24~" + +#define ESC_S_F5 ESC_CSI "15;2~" +#define ESC_S_F6 ESC_CSI "17;2~" +#define ESC_S_F7 ESC_CSI "18;2~" +#define ESC_S_F8 ESC_CSI "19;2~" +#define ESC_S_F9 ESC_CSI "20;2~" +#define ESC_S_F10 ESC_CSI "21;2~" +#define ESC_S_F11 ESC_CSI "23;2~" +#define ESC_S_F12 ESC_CSI "24;2~" + +#define ESC_C_F5 ESC_CSI "15;5~" +#define ESC_C_F6 ESC_CSI "17;5~" +#define ESC_C_F7 ESC_CSI "18;5~" +#define ESC_C_F8 ESC_CSI "19;5~" +#define ESC_C_F9 ESC_CSI "20;5~" +#define ESC_C_F10 ESC_CSI "21;5~" +#define ESC_C_F11 ESC_CSI "23;5~" +#define ESC_C_F12 ESC_CSI "24;5~" + +#define ESC_HIDE ESC_CSI "?25l" +#define ESC_SHOW ESC_CSI "?25h" + +#define ESC_NORMAL ESC_CSI "0m" +#define ESC_BOLD ESC_CSI "1m" +#define ESC_UNDERL ESC_CSI "4m" +#define ESC_BLINK ESC_CSI "5m" +#define ESC_INVERS ESC_CSI "7m" +#define ESC_FRAMED ESC_CSI "51m" +#define ESC_CIRCLED ESC_CSI "52m" +#define ESC_OVERL ESC_CSI "53m" + +#define ESC_TBLACK ESC_CSI "30m" +#define ESC_TRED ESC_CSI "38;2;255;0;0m" +#define ESC_TGREEN ESC_CSI "38;2;0;255;0m" +#define ESC_TYELLOW ESC_CSI "38;2;255;255;0m" +#define ESC_TBLUE ESC_CSI "38;2;0;0;255m" +#define ESC_TMAGENTA ESC_CSI "38;2;255;0;255m" +#define ESC_TCYAN ESC_CSI "38;2;0;255;255m" +#define ESC_TWHITE ESC_CSI "37m" + +#define ESC_BBLACK ESC_CSI "40m" +#define ESC_BRED ESC_CSI "48;2;255;0;0m" +#define ESC_BGREEN ESC_CSI "48;2;0;255;0m" +#define ESC_BYELLOW ESC_CSI "48;2;255;255;0m" +#define ESC_BBLUE ESC_CSI "48;2;0;0;255m" +#define ESC_BMAGENTA ESC_CSI "48;2;255;0;255m" +#define ESC_BCYAN ESC_CSI "48;2;0;255;255m" +#define ESC_BWHITE ESC_CSI "47m" + +#define ESC_BLIGHTGREY ESC_CSI "48;2;220;220;220m" +#define ESC_BGREY ESC_CSI "48;2;128;128;128m" + + +enum { esc_top = 1, esc_bottom = 2, esc_left = 4, esc_right = 8, }; + +#define ESC_BORDER \ +((char const*const[]){ \ +[0] = " ", \ + [esc_top] = "━", \ + [esc_bottom] = "━", \ + [esc_bottom | esc_top] = "━", \ + [esc_left] = "┃", \ + [esc_left | esc_top] = "┏", \ + [esc_left | esc_bottom] = "┗", \ + [esc_left | esc_bottom | esc_top] = "┣", \ + [esc_right] = "┃", \ + [esc_right | esc_top] = "┓", \ + [esc_right | esc_bottom] = "┛", \ + [esc_right | esc_bottom | esc_top] = "┫", \ + [esc_right | esc_left] = "┃", \ + [esc_right | esc_left | esc_top] = "┳", \ + [esc_right | esc_left | esc_bottom] = "┻", \ + [esc_right | esc_left | esc_bottom | esc_top] = "╋", \ + }) + +enum { esc_nw = 1, esc_ne = 2, esc_sw = 4, esc_se = 8, }; + +#define ESC_BLOCK \ +((char const*const[]){ \ +[0] = " ", \ + [esc_nw] = "▘", \ + [esc_ne] = "▝", \ + [esc_ne | esc_nw] = "▀", \ + [esc_sw] = "▖", \ + [esc_sw | esc_nw] = "▌", \ + [esc_sw | esc_ne] = "▞", \ + [esc_sw | esc_ne | esc_nw] = "▛", \ + [esc_se] = "▗", \ + [esc_se | esc_nw] = "▚", \ + [esc_se | esc_ne] = "▐", \ + [esc_se | esc_ne | esc_nw] = "▜", \ + [esc_se | esc_sw] = "▄", \ + [esc_se | esc_sw | esc_nw] = "▙", \ + [esc_se | esc_sw | esc_ne] = "▟", \ + [esc_se | esc_sw | esc_ne | esc_nw] = "█", \ + }) + +/** + ** @brief relative cursor movement + **/ +void esc_move(FILE* f, int vert, int hori); + +/** + ** @brief asolute cursor movement + **/ +void esc_goto(FILE* f, unsigned vert, unsigned hori); + +#endif |
