1// ansi_demo.c
2// ANSI Escape Codes μμ° νλ‘κ·Έλ¨
3// ν°λ―Έλμμ 컀μ μ΄λκ³Ό μμμ μ μ΄νλ λ°©λ²μ 보μ¬μ€λλ€.
4
5#include <stdio.h>
6#include <unistd.h>
7
8// ANSI Escape Codes μ μ
9#define CLEAR_SCREEN "\033[2J"
10#define CURSOR_HOME "\033[H"
11#define HIDE_CURSOR "\033[?25l"
12#define SHOW_CURSOR "\033[?25h"
13
14// 컀μ μ΄λ: \033[row;colH
15#define MOVE_CURSOR(row, col) printf("\033[%d;%dH", row, col)
16
17// μμ μ½λ
18#define COLOR_RESET "\033[0m"
19#define COLOR_RED "\033[31m"
20#define COLOR_GREEN "\033[32m"
21#define COLOR_YELLOW "\033[33m"
22#define COLOR_BLUE "\033[34m"
23#define COLOR_MAGENTA "\033[35m"
24#define COLOR_CYAN "\033[36m"
25
26// λ°°κ²½μ μ½λ
27#define BG_RED "\033[41m"
28#define BG_GREEN "\033[42m"
29#define BG_YELLOW "\033[43m"
30#define BG_BLUE "\033[44m"
31
32// ν
μ€νΈ μ€νμΌ
33#define BOLD "\033[1m"
34#define UNDERLINE "\033[4m"
35
36int main(void) {
37 // νλ©΄ μ§μ°κΈ°
38 printf(CLEAR_SCREEN);
39 printf(CURSOR_HOME);
40
41 // 컀μ μ¨κΈ°κΈ°
42 printf(HIDE_CURSOR);
43
44 // μ λͺ© νμ
45 MOVE_CURSOR(2, 10);
46 printf(BOLD COLOR_CYAN "=== ANSI Escape Codes μμ° ===" COLOR_RESET);
47
48 // μ¬λ¬ μμΉμ μμ ν
μ€νΈ μΆλ ₯
49 MOVE_CURSOR(5, 10);
50 printf(COLOR_RED "λΉ¨κ°μ ν
μ€νΈ" COLOR_RESET);
51
52 MOVE_CURSOR(7, 10);
53 printf(COLOR_GREEN "μ΄λ‘μ ν
μ€νΈ" COLOR_RESET);
54
55 MOVE_CURSOR(9, 10);
56 printf(COLOR_BLUE "νλμ ν
μ€νΈ" COLOR_RESET);
57
58 MOVE_CURSOR(11, 10);
59 printf(BOLD COLOR_YELLOW "κ΅΅μ λ
Έλμ ν
μ€νΈ" COLOR_RESET);
60
61 MOVE_CURSOR(13, 10);
62 printf(UNDERLINE COLOR_MAGENTA "λ°μ€ λ§μ ν ν
μ€νΈ" COLOR_RESET);
63
64 // λ°°κ²½μ μμ
65 MOVE_CURSOR(15, 10);
66 printf(BG_RED " λ°°κ²½μ λΉ¨κ° " COLOR_RESET);
67
68 MOVE_CURSOR(16, 10);
69 printf(BG_GREEN " λ°°κ²½μ μ΄λ‘ " COLOR_RESET);
70
71 // λ°μ€ 그리기 (UTF-8 λ°μ€ λ¬Έμ μ¬μ©)
72 MOVE_CURSOR(19, 5);
73 printf(COLOR_CYAN "ββββββββββββββββββββββ" COLOR_RESET);
74 for (int i = 20; i < 25; i++) {
75 MOVE_CURSOR(i, 5);
76 printf(COLOR_CYAN "β β" COLOR_RESET);
77 }
78 MOVE_CURSOR(25, 5);
79 printf(COLOR_CYAN "ββββββββββββββββββββββ" COLOR_RESET);
80
81 MOVE_CURSOR(22, 10);
82 printf(COLOR_YELLOW "λ°μ€ μμ ν
μ€νΈ" COLOR_RESET);
83
84 // 그리λ ν¨ν΄ 그리기
85 MOVE_CURSOR(19, 40);
86 printf(BOLD "그리λ ν¨ν΄:" COLOR_RESET);
87 for (int row = 0; row < 5; row++) {
88 for (int col = 0; col < 10; col++) {
89 MOVE_CURSOR(20 + row, 40 + col * 2);
90 if ((row + col) % 2 == 0) {
91 printf(COLOR_GREEN "β " COLOR_RESET);
92 } else {
93 printf(COLOR_RED "β‘" COLOR_RESET);
94 }
95 }
96 }
97
98 // μ λλ©μ΄μ
ν¨κ³Ό (μ§ν λ°)
99 MOVE_CURSOR(27, 5);
100 printf("λ‘λ© μ€: [");
101 for (int i = 0; i < 20; i++) {
102 printf(COLOR_GREEN "β" COLOR_RESET);
103 fflush(stdout);
104 usleep(100000); // 100ms λκΈ°
105 }
106 printf("]");
107
108 // μλ΄ λ©μμ§
109 MOVE_CURSOR(29, 5);
110 printf(COLOR_YELLOW "3μ΄ ν μλμΌλ‘ μ’
λ£λ©λλ€..." COLOR_RESET);
111
112 fflush(stdout);
113 sleep(3);
114
115 // νλ©΄ μ§μ°κΈ° λ° μ»€μ 보μ΄κΈ°
116 printf(CLEAR_SCREEN);
117 printf(SHOW_CURSOR);
118 MOVE_CURSOR(1, 1);
119
120 printf("ANSI Escape Codes μμ°μ λ§μΉ©λλ€.\n");
121
122 return 0;
123}