Terminal.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef CORE_TERMINAL_H
  2. #define CORE_TERMINAL_H
  3. #include "core/Vector.h"
  4. #define ESC "\33["
  5. #define TERMINAL_RESET ESC "0m"
  6. #define TERMINAL_BOLD ESC "1m"
  7. #define TERMINAL_BLACK ESC "30m"
  8. #define TERMINAL_RED ESC "31m"
  9. #define TERMINAL_GREEN ESC "32m"
  10. #define TERMINAL_YELLOW ESC "33m"
  11. #define TERMINAL_BLUE ESC "34m"
  12. #define TERMINAL_MAGENTA ESC "35m"
  13. #define TERMINAL_CYAN ESC "36m"
  14. #define TERMINAL_WHITE ESC "37m"
  15. #define TERMINAL_BRIGHT_BLACK ESC "90m"
  16. #define TERMINAL_BRIGHT_RED ESC "91m"
  17. #define TERMINAL_BRIGHT_GREEN ESC "92m"
  18. #define TERMINAL_BRIGHT_YELLOW ESC "93m"
  19. #define TERMINAL_BRIGHT_BLUE ESC "94m"
  20. #define TERMINAL_BRIGHT_MAGENTA ESC "95m"
  21. #define TERMINAL_BRIGHT_CYAN ESC "96m"
  22. #define TERMINAL_BRIGHT_WHITE ESC "97m"
  23. #define TERMINAL_FG_BLACK TERMINAL_BLACK
  24. #define TERMINAL_FG_RED TERMINAL_RED
  25. #define TERMINAL_FG_GREEN TERMINAL_GREEN
  26. #define TERMINAL_FG_YELLOW TERMINAL_YELLOW
  27. #define TERMINAL_FG_BLUE TERMINAL_BLUE
  28. #define TERMINAL_FG_MAGENTA TERMINAL_MAGENTA
  29. #define TERMINAL_FG_CYAN TERMINAL_CYAN
  30. #define TERMINAL_FG_WHITE TERMINAL_WHITE
  31. #define TERMINAL_FG_BRIGHT_BLACK TERMINAL_BRIGHT_BLACK
  32. #define TERMINAL_FG_BRIGHT_RED TERMINAL_BRIGHT_RED
  33. #define TERMINAL_FG_BRIGHT_GREEN TERMINAL_BRIGHT_GREEN
  34. #define TERMINAL_FG_BRIGHT_YELLOW TERMINAL_BRIGHT_YELLOW
  35. #define TERMINAL_FG_BRIGHT_BLUE TERMINAL_BRIGHT_BLUE
  36. #define TERMINAL_FG_BRIGHT_MAGENTA TERMINAL_BRIGHT_MAGENTA
  37. #define TERMINAL_FG_BRIGHT_CYAN TERMINAL_BRIGHT_CYAN
  38. #define TERMINAL_FG_BRIGHT_WHITE TERMINAL_BRIGHT_WHITE
  39. #define TERMINAL_BG_BLACK ESC "40m"
  40. #define TERMINAL_BG_RED ESC "41m"
  41. #define TERMINAL_BG_GREEN ESC "42m"
  42. #define TERMINAL_BG_YELLOW ESC "43m"
  43. #define TERMINAL_BG_BLUE ESC "44m"
  44. #define TERMINAL_BG_MAGENTA ESC "45m"
  45. #define TERMINAL_BG_CYAN ESC "46m"
  46. #define TERMINAL_BG_WHITE ESC "47m"
  47. #define TERMINAL_BG_BRIGHT_BLACK ESC "100m"
  48. #define TERMINAL_BG_BRIGHT_RED ESC "101m"
  49. #define TERMINAL_BG_BRIGHT_GREEN ESC "102m"
  50. #define TERMINAL_BG_BRIGHT_YELLOW ESC "103m"
  51. #define TERMINAL_BG_BRIGHT_BLUE ESC "104m"
  52. #define TERMINAL_BG_BRIGHT_MAGENTA ESC "105m"
  53. #define TERMINAL_BG_BRIGHT_CYAN ESC "106m"
  54. #define TERMINAL_BG_BRIGHT_WHITE ESC "107m"
  55. // keycodes
  56. #define TERMINAL_KEY_UNKNOWN 0x1'0000'0000lu
  57. // default keycodes
  58. #define TERMINAL_KEY_ARROW_LEFT 0x1'0000'0001lu
  59. #define TERMINAL_KEY_ARROW_RIGHT 0x1'0000'0002lu
  60. #define TERMINAL_KEY_ARROW_UP 0x1'0000'0003lu
  61. #define TERMINAL_KEY_ARROW_DOWN 0x1'0000'0004lu
  62. #define TERMINAL_KEY_DELETE 0x1'0000'0005lu
  63. #define TERMINAL_KEY_F1 0x1'0000'0006lu
  64. #define TERMINAL_KEY_F2 0x1'0000'0007lu
  65. #define TERMINAL_KEY_F3 0x1'0000'0008lu
  66. #define TERMINAL_KEY_F4 0x1'0000'0009lu
  67. #define TERMINAL_KEY_F5 0x1'0000'000Alu
  68. #define TERMINAL_KEY_F6 0x1'0000'000Blu
  69. #define TERMINAL_KEY_F7 0x1'0000'000Clu
  70. #define TERMINAL_KEY_F8 0x1'0000'000Dlu
  71. #define TERMINAL_KEY_F9 0x1'0000'000Elu
  72. #define TERMINAL_KEY_F10 0x1'0000'000Flu
  73. #define TERMINAL_KEY_F11 0x1'0000'0010lu
  74. #define TERMINAL_KEY_F12 0x1'0000'0011lu
  75. #define TERMINAL_KEY_PAGE_UP 0x1'0000'0012lu
  76. #define TERMINAL_KEY_PAGE_DOWN 0x1'0000'0013lu
  77. #define TERMINAL_KEY_HOME 0x1'0000'0014lu
  78. #define TERMINAL_KEY_END 0x1'0000'0015lu
  79. // key modifiers
  80. #define TERMINAL_KEY_CTRL 0x2'0000'0000lu
  81. #define TERMINAL_KEY_SHIFT 0x4'0000'0000lu
  82. #define TERMINAL_KEY_ALT 0x8'0000'0000lu
  83. void enterAlternativeTerminal();
  84. void leaveAlternativeTerminal();
  85. IntVector2 getTerminalSize();
  86. void clearTerminal();
  87. void clearTerminalLine();
  88. void hideCursor();
  89. void showCursor();
  90. void resetCursor();
  91. void moveCursorLeft(int i);
  92. void moveCursorRight(int i);
  93. void moveCursorUp(int i);
  94. void moveCursorDown(int i);
  95. bool enterRawTerminal();
  96. bool leaveRawTerminal();
  97. u64 getRawChar();
  98. bool isSpecialChar(u64 u);
  99. typedef struct {
  100. u64 key;
  101. bool control;
  102. bool shift;
  103. bool alt;
  104. } SpecialChar;
  105. SpecialChar convertToSpecialChar(u64 u);
  106. #endif