/*
ANSI转义序列可以用来设置终端中文本的颜色、背景色和其他属性。以下是一些常见的ANSI颜色代码及其对应的颜色值：

- 前景色（文本颜色）：

  - 黑色：`\033[30m`
  - 红色：`\033[31m`
  - 绿色：`\033[32m`
  - 黄色：`\033[33m`
  - 蓝色：`\033[34m`
  - 紫色：`\033[35m`
  - 青色：`\033[36m`
  - 白色：`\033[37m`

- 背景色：

  - 黑色：`\033[40m`
  - 红色：`\033[41m`
  - 绿色：`\033[42m`
  - 黄色：`\033[43m`
  - 蓝色：`\033[44m`
  - 紫色：`\033[45m`
  - 青色：`\033[46m`
  - 白色：`\033[47m`



除了前景色和背景色，ANSI转义序列还可以用来设置其他文本属性，例如加粗、下划线、闪烁等。以下是一些常见的ANSI属性代码及其对应的属性：

- 加粗：`\033[1m`
- 下划线：`\033[4m`
- 闪烁：`\033[5m`
- 反显（交换前景色和背景色）：`\033[7m`
- 隐藏（使文本不可见）：`\033[8m`

你可以将这些属性代码与前景色、背景色代码组合使用，以实现更多的效果。例如，要设置红色加粗文本，可以使用`\033[31;1m`。



除了设置文本颜色、背景色和其他属性，ANSI转义序列还可以用来控制终端的显示，例如清空屏幕、移动光标等。以下是一些常见的ANSI控制代码及其对应的操作：

- 清空屏幕：`\033[2J`
- 将光标移动到屏幕左上角：`\033[H` 或 `\033[1;1H`
- 将光标向上移动n行：`\033[nA`
- 将光标向下移动n行：`\033[nB`
- 将光标向右移动n列：`\033[nC`
- 将光标向左移动n列：`\033[nD`
- 隐藏光标：`\033[?25l`
- 显示光标：`\033[?25h`



除了常见的ANSI转义序列，还有一些特殊的控制代码，可以用来实现一些高级的终端操作。以下是一些常见的特殊控制代码及其对应的操作：

- BEL（响铃）：`\a`
- ESC（转义字符）：`\e` 或 `\033`
- CSI（控制序列引导）：`\033[`
- OSC（操作系统命令）：`\033]`

这些特殊控制代码通常用于与终端外部环境进行交互，例如向终端发送提示音、设置终端标题等。其中，OSC代码可以用来向终端发送自定义的命令，以实现一些特殊的功能。例如，可以使用OSC代码设置终端的图标、背景图片等。

需要注意的是，这些特殊控制代码可能在不同的终端程序或操作系统中有所不同。如果你想要在程序中使用这些代码，最好先查看终端程序或操作系统的文档，确保代码的兼容性和正确性。
*/

#include <stdio.h>
#include <string.h>

typedef enum front_color_e
{
    BLACK = 30, // 黑色
    RED,        // 红色
    GREEN,      // 绿色
    YELLOW,     // 黄色
    BLUE,       // 蓝色
    PURPLE,     // 紫色
    CYAN,       // 青色
    WHITE,      // 白色
} Front_Color;  // 前景色

typedef enum back_color_e
{
    BLACK_B = 40, // 黑色
    RED_B,        // 红色
    GREEN_B,      // 绿色
    YELLOW_B,     // 黄色
    BLUE_B,       // 蓝色
    PURPLE_B,     // 紫色
    CYAN_B,       // 青色
    WHITE_B,      // 白色
} Back_Color;     // 背景色

typedef enum attr_e
{
    BOLD = 1,      // 加粗
    UNDERLINE = 4, // 下划线
    BLINK,         // 闪烁
    REVERSE = 7,   // 反显
    HIDE,          // 隐藏
} Attr;            // 文本属性