vt100.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. /********************************************************************************************
  2. * include/nuttx/vt100.h
  3. * VT100 Escape Sequences
  4. *
  5. * Copyright (C) 2012 Gregory Nutt. All rights reserved.
  6. * Author: Gregory Nutt <gnutt@nuttx.org>
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. * 2. Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in
  16. * the documentation and/or other materials provided with the
  17. * distribution.
  18. * 3. Neither the name NuttX nor the names of its contributors may be
  19. * used to endorse or promote products derived from this software
  20. * without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  23. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  24. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  25. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  26. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  27. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  28. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  29. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  30. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  31. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  32. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  33. * POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ********************************************************************************************/
  36. #ifndef __INCLUDE_NUTTX_VT100_H
  37. #define __INCLUDE_NUTTX_VT100_H
  38. /********************************************************************************************
  39. * Included Files
  40. ********************************************************************************************/
  41. #include <nuttx/ascii.h>
  42. /********************************************************************************************
  43. * Pre-processor Definitions
  44. ********************************************************************************************/
  45. #define VT100_SETNL {ASCII_ESC, '[', '2', '0', 'h'} /* Set new line mode */
  46. #define VT100_SETAPPL {ASCII_ESC, '[', '?', '1', 'h'} /* Set cursor key to application */
  47. #define VT100_SETCOL {ASCII_ESC, '[', '?', '3', 'h'} /* Set number of columns to 132 */
  48. #define VT100_SETSMOOTH {ASCII_ESC, '[', '?', '4', 'h'} /* Set smooth scrolling */
  49. #define VT100_SETREVSCRN {ASCII_ESC, '[', '?', '5', 'h'} /* Set reverse video on screen */
  50. #define VT100_SETORGREL {ASCII_ESC, '[', '?', '6', 'h'} /* Set origin to relative */
  51. #define VT100_SETWRAP {ASCII_ESC, '[', '?', '7', 'h'} /* Set auto-wrap mode */
  52. #define VT100_SETREP {ASCII_ESC, '[', '?', '8', 'h'} /* Set auto-repeat mode */
  53. #define VT100_SETINTER {ASCII_ESC, '[', '?', '9', 'h'} /* Set interlacing mode */
  54. #define VT100_SETLF {ASCII_ESC, '[', '2', '0', 'l'} /* Set line feed mode */
  55. #define VT100_SETCURSOR {ASCII_ESC, '[', '?', '1', 'l'} /* Set cursor key to cursor */
  56. #define VT100_SETVT52 {ASCII_ESC, '[', '?', '2', 'l'} /* Set VT52 (versus ANSI) */
  57. #define VT100_RESETCOL {ASCII_ESC, '[', '?', '3', 'l'} /* Set number of columns to 80 */
  58. #define VT100_SETJUMP {ASCII_ESC, '[', '?', '4', 'l'} /* Set jump scrolling */
  59. #define VT100_SETNORMSCRN {ASCII_ESC, '[', '?', '5', 'l'} /* Set normal video on screen */
  60. #define VT100_SETORGABS {ASCII_ESC, '[', '?', '6', 'l'} /* Set origin to absolute */
  61. #define VT100_RESETWRAP {ASCII_ESC, '[', '?', '7', 'l'} /* Reset auto-wrap mode */
  62. #define VT100_RESETREP {ASCII_ESC, '[', '?', '8', 'l'} /* Reset auto-repeat mode */
  63. #define VT100_RESETINTER {ASCII_ESC, '[', '?', '9', 'l'} /* Reset interlacing mode */
  64. #define VT100_ALTKEYPAD {ASCII_ESC, '='} /* Set alternate keypad mode */
  65. #define VT100_NUMKEYPAD {ASCII_ESC, '>'} /* Set numeric keypad mode */
  66. #define VT100_SETUKG0 {ASCII_ESC, '(', 'A'} /* Set United Kingdom G0 character set */
  67. #define VT100_SETUKG1 {ASCII_ESC, ')', 'A'} /* Set United Kingdom G1 character set */
  68. #define VT100_SETUSG0 {ASCII_ESC, '(', 'B'} /* Set United States G0 character set */
  69. #define VT100_SETUSG1 {ASCII_ESC, ')', 'B'} /* Set United States G1 character set */
  70. #define VT100_SETSPECG0 {ASCII_ESC, '(', '0'} /* Set G0 special chars. & line set */
  71. #define VT100_SETSPECG1 {ASCII_ESC, ')', '0'} /* Set G1 special chars. & line set */
  72. #define VT100_SETALTG0 {ASCII_ESC, '(', '1'} /* Set G0 alternate character ROM */
  73. #define VT100_SETALTG1 {ASCII_ESC, ')', '1'} /* Set G1 alternate character ROM */
  74. #define VT100_SETALTSPECG0 {ASCII_ESC, '(', '2'} /* Set G0 alt char ROM and spec. graphics */
  75. #define VT100_SETALTSPECG1 {ASCII_ESC, ')', '2'} /* Set G1 alt char ROM and spec. graphics */
  76. #define VT100_SETSS2 {ASCII_ESC, 'N'} /* Set single shift 2 */
  77. #define VT100_SETSS3 {ASCII_ESC, 'O'} /* Set single shift 3 */
  78. #define VT100_MODESOFF {ASCII_ESC, '[', 'm'} /* Turn off character attributes */
  79. #define VT100_MODESOFF2 {ASCII_ESC, '[', '0', 'm'} /* Turn off character attributes */
  80. #define VT100_BOLD {ASCII_ESC, '[', '1', 'm'} /* Turn bold mode on */
  81. #define VT100_LOWINT {ASCII_ESC, '[', '2', 'm'} /* Turn low intensity mode on */
  82. #define VT100_FORE_BLACK {ASCII_ESC, '[', '3', '0', 'm'} /* Set foreground to color #0 - black */
  83. #define VT100_FORE_RED {ASCII_ESC, '[', '3', '1', 'm'} /* Set foreground to color #1 - red */
  84. #define VT100_FORE_GREEN {ASCII_ESC, '[', '3', '2', 'm'} /* Set foreground to color #2 - green */
  85. #define VT100_FORE_YELLOW {ASCII_ESC, '[', '3', '3', 'm'} /* Set foreground to color #3 - yellow */
  86. #define VT100_FORE_BLUE {ASCII_ESC, '[', '3', '4', 'm'} /* Set foreground to color #4 - blue */
  87. #define VT100_FORE_MAGENTA {ASCII_ESC, '[', '3', '5', 'm'} /* Set foreground to color #5 - magenta */
  88. #define VT100_FORE_CYAN {ASCII_ESC, '[', '3', '6', 'm'} /* Set foreground to color #6 - cyan */
  89. #define VT100_FORE_WHITE {ASCII_ESC, '[', '3', '7', 'm'} /* Set foreground to color #7 - white */
  90. #define VT100_FORE_DEFAULT {ASCII_ESC, '[', '3', '9', 'm'} /* Set foreground to color #9 - default */
  91. #define VT100_UNDERLINE {ASCII_ESC, '[', '4', 'm'} /* Turn underline mode on */
  92. #define VT100_BACK_BLACK {ASCII_ESC, '[', '4', '0', 'm'} /* Set background to color #0 - black */
  93. #define VT100_BACK_RED {ASCII_ESC, '[', '4', '1', 'm'} /* Set background to color #1 - red */
  94. #define VT100_BACK_GREEN {ASCII_ESC, '[', '4', '2', 'm'} /* Set background to color #2 - green */
  95. #define VT100_BACK_YELLOW {ASCII_ESC, '[', '4', '3', 'm'} /* Set background to color #3 - yellow */
  96. #define VT100_BACK_BLUE {ASCII_ESC, '[', '4', '4', 'm'} /* Set background to color #4 - blue */
  97. #define VT100_BACK_MAGENTA {ASCII_ESC, '[', '4', '5', 'm'} /* Set background to color #5 - magenta */
  98. #define VT100_BACK_CYAN {ASCII_ESC, '[', '4', '6', 'm'} /* Set background to color #6 - cyan */
  99. #define VT100_BACK_WHITE {ASCII_ESC, '[', '4', '7', 'm'} /* Set background to color #7 - white */
  100. #define VT100_BACK_DEFAULT {ASCII_ESC, '[', '4', '9', 'm'} /* Set background to color #9 - default */
  101. #define VT100_BLINK {ASCII_ESC, '[', '5', 'm'} /* Turn blinking mode on */
  102. #define VT100_REVERSE {ASCII_ESC, '[', '7', 'm'} /* Turn reverse video on */
  103. #define VT100_INVISIBLE {ASCII_ESC, '[', '8', 'm'} /* Turn invisible text mode on */
  104. #define VT100_BOLDOFF {ASCII_ESC, '[', '2', '2', 'm'} /* Turn bold off */
  105. #define VT100_UNDERLINEOFF {ASCII_ESC, '[', '2', '4', 'm'} /* Turn underline off */
  106. #define VT100_BLINKOFF {ASCII_ESC, '[', '2', '5', 'm'} /* Turn blink off */
  107. #define VT100_REVERSEOFF {ASCII_ESC, '[', '2', '7', 'm'} /* Turn reverse video off */
  108. #define VT100_SETWIN(t,b) {ASCII_ESC, '[', (t), ';', (b), 'r'} /* Set top and bottom line#s of a window */
  109. #define VT100_CURSOROFF {ASCII_ESC, '[', '?', '2', '5', 'l'} /* Cursor OFF */
  110. #define VT100_CURSORON {ASCII_ESC, '[', '?', '2', '5', 'h'} /* Cursor ON */
  111. #define VT100_CURSOROFF2 {ASCII_ESC, '[', '?', '5', '0', 'l'} /* Cursor OFF */
  112. #define VT100_CURSORON2 {ASCII_ESC, '[', '?', '5', '0', 'h'} /* Cursor ON */
  113. #define VT100_CURSORUP(n) {ASCII_ESC, '[', (n), 'A'} /* Move cursor up n lines */
  114. #define VT100_CURSORDN(n) {ASCII_ESC, '[', (n), 'B'} /* Move cursor down n lines */
  115. #define VT100_CURSORRT(n) {ASCII_ESC, '[', (n), 'C'} /* Move cursor right n lines */
  116. #define VT100_CURSORLF(n) {ASCII_ESC, '[', (n), 'D'} /* Move cursor left n lines */
  117. #define VT100_CURSORHOME {ASCII_ESC, '[', 'H'} /* Move cursor to upper left corner */
  118. #define VT100_CURSORHOME_ {ASCII_ESC, '[', ';', 'H'} /* Move cursor to upper left corner */
  119. #define VT100_CURSORPOS(v,h) {ASCII_ESC, '[', (v), ';', (h), 'H'} /* Move cursor to screen location v,h */
  120. #define VT100_HVHOME {ASCII_ESC, '[', 'f'} /* Move cursor to upper left corner */
  121. #define VT100_HVHOME_ {ASCII_ESC, '[', ';', 'f'} /* Move cursor to upper left corner */
  122. #define VT100_HVPOS(v,h) {ASCII_ESC, '[', (v), ';', (h), 'f'} /* Move cursor to screen location v,h */
  123. #define VT100_INDEX {ASCII_ESC, 'D'} /* Move/scroll window up one line */
  124. #define VT100_REVINDEX {ASCII_ESC, 'M'} /* Move/scroll window down one line */
  125. #define VT100_NEXTLINE {ASCII_ESC, 'E'} /* Move to next line */
  126. #define VT100_SAVECURSOR {ASCII_ESC, '7'} /* Save cursor position and attributes */
  127. #define VT100_RESTORECURSOR {ASCII_ESC, '8'} /* Restore cursor position and attribute */
  128. #define VT100_TABSET {ASCII_ESC, 'H'} /* Set a tab at the current column */
  129. #define VT100_TABCLR {ASCII_ESC, '[', 'g'} /* Clear a tab at the current column */
  130. #define VT100_TABCLR_ {ASCII_ESC, '[', '0', 'g'} /* Clear a tab at the current column */
  131. #define VT100_TABCLRALL {ASCII_ESC, '[', '3', 'g'} /* Clear all tabs */
  132. #define VT100_DHTOP {ASCII_ESC, '#', '3'} /* Double-height letters, top half */
  133. #define VT100_DHBOT {ASCII_ESC, '#', '4'} /* Double-height letters, bottom hal */
  134. #define VT100_SWSH {ASCII_ESC, '#', '5'} /* Single width, single height letters */
  135. #define VT100_DWSH {ASCII_ESC, '#', '6'} /* Double width, single height letters */
  136. #define VT100_CLEAREOL {ASCII_ESC, '[', 'K'} /* Clear line from cursor right */
  137. #define VT100_CLEAREOL_ {ASCII_ESC, '[', '0', 'K'} /* Clear line from cursor right */
  138. #define VT100_CLEARBOL {ASCII_ESC, '[', '1', 'K'} /* Clear line from cursor left */
  139. #define VT100_CLEARLINE {ASCII_ESC, '[', '2', 'K'} /* Clear entire line */
  140. #define VT100_CLEAREOS {ASCII_ESC, '[', 'J'} /* Clear screen from cursor down */
  141. #define VT100_CLEAREOS_ {ASCII_ESC, '[', '0', 'J'} /* Clear screen from cursor down */
  142. #define VT100_CLEARBOS {ASCII_ESC, '[', '1', 'J'} /* Clear screen from cursor up */
  143. #define VT100_CLEARSCREEN {ASCII_ESC, '[', '2', 'J'} /* Clear entire screen */
  144. #define VT100_DEVSTAT {ASCII_ESC, '[', '5', 'n'} /* Device status report */
  145. #define VT100_TERMOK {ASCII_ESC, '[', '0', 'n'} /* Response: terminal is OK */
  146. #define VT100_TERMNOK {ASCII_ESC, '[', '3', 'n'} /* Response: terminal is not OK */
  147. #define VT100_GETCURSOR {ASCII_ESC, '[', '6', 'n'} /* Get cursor position */
  148. #define VT100_CURSORPOSAT {ASCII_ESC, '[', (v), ';', (h), 'R'} /* Response: cursor is at v,h */
  149. #define VT100_IDENT {ASCII_ESC, '[', 'c'} /* Identify what terminal type */
  150. #define VT100_IDENT_ {ASCII_ESC, '[', '0', 'c'} /* Identify what terminal type */
  151. #define VT100_GETTYPE {ASCII_ESC, '[', '?', '1', ';', (n), '0', 'c'} /* Response: terminal type code n */
  152. #define VT100_RESET RIS {ASCII_ESC, 'c'} /* Reset terminal to initial state */
  153. #define VT100_ALIGN {ASCII_ESC, '#', '8'} /* Screen alignment display */
  154. #define VT100_TESTPU {ASCII_ESC, '[', '2', ';', '1', 'y'} /* Confidence power up test */
  155. #define VT100_TESTLB {ASCII_ESC, '[', '2', ';', '2', 'y'} /* Confidence loopback test */
  156. #define VT100_TESTPUREP {ASCII_ESC, '[', '2', ';', '9', 'y'} /* Repeat power up test */
  157. #define VT100_TESTLBREP {ASCII_ESC, '[', '2', ';', '1', '0', 'y'} /* Repeat loopback test */
  158. #define VT100_LEDSOFF {ASCII_ESC, '[', '0', 'q'} /* Turn off all four leds */
  159. #define VT100_LED1 {ASCII_ESC, '[', '1', 'q'} /* Turn on LED #1 */
  160. #define VT100_LED2 {ASCII_ESC, '[', '2', 'q'} /* Turn on LED #2 */
  161. #define VT100_LED3 {ASCII_ESC, '[', '3', 'q'} /* Turn on LED #3 */
  162. #define VT100_LED4 {ASCII_ESC, '[', '4', 'q'} /* Turn on LED #4 */
  163. /* All codes below are for use in VT52 compatibility mode. */
  164. #define VT52_SETANSI {ASCII_ESC, '<'} /* Enter/exit ANSI mode */
  165. #define VT52_ALTKEYPAD {ASCII_ESC, '='} /* Enter alternate keypad mode */
  166. #define VT52_NUMKEYPAD {ASCII_ESC, '>'} /* Exit alternate keypad mode */
  167. #define VT52_SETGR {ASCII_ESC, 'F'} /* Use special graphics character set */
  168. #define VT52_RESETGR {ASCII_ESC, 'G'} /* Use normal US/UK character set */
  169. #define VT52_CURSORUP {ASCII_ESC, 'A'} /* Move cursor up one line */
  170. #define VT52_CURSORDN {ASCII_ESC, 'B'} /* Move cursor down one line */
  171. #define VT52_CURSORRT {ASCII_ESC, 'C'} /* Move cursor right one char */
  172. #define VT52_CURSORLF {ASCII_ESC, 'D'} /* Move cursor left one char */
  173. #define VT52_CURSORHOME {ASCII_ESC, 'H'} /* Move cursor to upper left corner */
  174. #define VT52_CURSORPOS(v,h) {ASCII_ESC, (v), (h)} /* Move cursor to v,h location */
  175. #define VT52_REVINDEX {ASCII_ESC, 'I'} /* Generate a reverse line-feed */
  176. #define VT52_CLEAREOL {ASCII_ESC, 'K'} /* Erase to end of current line */
  177. #define VT52_CLEAREOS {ASCII_ESC, 'J'} /* Erase to end of screen */
  178. #define VT52_IDENT {ASCII_ESC, 'Z'} /* Identify what the terminal is */
  179. #define VT52_IDENTRESP {ASCII_ESC, '/', 'Z'} /* Correct response to ident */
  180. /* Format strings for VT100 sequences that require numeric arguments */
  181. #define VT100_BLACK 0 /* Color #0 - black */
  182. #define VT100_RED 1 /* Color #1 - red */
  183. #define VT100_GREEN 2 /* Color #2 - green */
  184. #define VT100_YELLOW 3 /* Color #3 - yellow */
  185. #define VT100_BLUE 4 /* Color #4 - blue */
  186. #define VT100_MAGENTA 5 /* Color #5 - magenta */
  187. #define VT100_CYAN 6 /* Color #6 - cyan */
  188. #define VT100_WHITE 7 /* Color #7 - white */
  189. #define VT100_DEFAULT 9 /* Color #9 - default */
  190. #define VT100_FMT_FORE_COLOR "\033[3%dm" /* Set foreground to color #n, n=0-8,9*/
  191. #define VT100_FMT_BACK_COLOR "\033[4%dm" /* Color #n, n=0-8,9*/
  192. #define VT100_FMT_SETWIN "\033[%d;%dr" /* Set top and bottom line#s of a window */
  193. #define VT100_FMT_CURSORUP "\033[%dA" /* Move cursor up n lines */
  194. #define VT100_FMT_CURSORDN "\033[%dB" /* Move cursor down n lines */
  195. #define VT100_FMT_CURSORRT "\033[%dC" /* Move cursor right n lines */
  196. #define VT100_FMT_CURSORLF "\033[%dD" /* Move cursor left n lines */
  197. #define VT100_FMT_CURSORPOS "\033[%d;%dH" /* Move cursor to screen location v,h */
  198. #define VT100_FMT_HVPOS "\033[%d;%df" /* Move cursor to screen location v,h */
  199. #define VT52_FMT_CURSORPOS "\033%d%d" /* Move cursor to v,h location */
  200. /* VT100 Special Key Codes
  201. *
  202. * These are sent from the terminal back to the computer when the particular
  203. * key is pressed. Note that the numeric keypad keys send different codes
  204. * in numeric mode than in alternate mode.
  205. */
  206. /* Function Keys */
  207. #define VT100_PF1 {ASCII_ESC, 'O', 'P'}
  208. #define VT100_PF2 {ASCII_ESC, 'O', 'Q'}
  209. #define VT100_PF3 {ASCII_ESC, 'O', 'R'}
  210. #define VT100_PF4 {ASCII_ESC, 'O', 'S'}
  211. /* Arrow keys */
  212. #define VT100_UP_RESET {ASCII_ESC, 'A'}
  213. #define VT100_UP_SET {ASCII_ESC, 'O', 'A'}
  214. #define VT100_DOWN_RESET {ASCII_ESC, 'B'}
  215. #define VT100_DOWN_SET {ASCII_ESC, 'O', 'B'}
  216. #define VT100_RIGHT_RESET {ASCII_ESC, 'C'}
  217. #define VT100_RIGHT_SET {ASCII_ESC, 'O', 'C'}
  218. #define VT100_LEFT_RESET {ASCII_ESC, 'D'}
  219. #define VT100_LEFT_SET {ASCII_ESC, 'O', 'D'}
  220. /* Numeric Keypad Keys */
  221. #define VT100_NUMERIC_0 {'0'}
  222. #define VT100_ALT_0 {ASCII_ESC, 'O', 'p'}
  223. #define VT100_NUMERIC_1 {'1'}
  224. #define VT100_ALT_1 {ASCII_ESC, 'O', 'q'}
  225. #define VT100_NUMERIC_2 {'2'}
  226. #define VT100_ALT_2 {ASCII_ESC, 'O', 'r'}
  227. #define VT100_NUMERIC_3 {'3'}
  228. #define VT100_ALT_3 {ASCII_ESC, 'O', 's'}
  229. #define VT100_NUMERIC_4 {'4'}
  230. #define VT100_ALT_4 {ASCII_ESC, 'O', 't'}
  231. #define VT100_NUMERIC_5 {'5'}
  232. #define VT100_ALT_5 {ASCII_ESC, 'O', 'u'}
  233. #define VT100_NUMERIC_6 {'6'}
  234. #define VT100_ALT_6 {ASCII_ESC, 'O', 'v'}
  235. #define VT100_NUMERIC_7 {'7'}
  236. #define VT100_ALT_7 {ASCII_ESC, 'O', 'w'}
  237. #define VT100_NUMERIC_8 {'8'}
  238. #define VT100_ALT_8 {ASCII_ESC, 'O', 'x'}
  239. #define VT100_NUMERIC_9 {'9',
  240. #define VT100_ALT_9 {ASCII_ESC, 'O', 'y'}
  241. #define VT100_NUMERIC_MINUS {'-'}
  242. #define VT100_ALT_MINUS {ASCII_ESC, 'O', 'm'}
  243. #define VT100_NUMERIC_COMMA {','}
  244. #define VT100_ALT_COMMA {ASCII_ESC, 'O', 'l'}
  245. #define VT100_NUMERIC_PERIOD {'.'}
  246. #define VT100_ALT_PERIOD {ASCII_ESC, 'O', 'n'}
  247. #define VT100_NUMERIC_ENTER {ASCII_CR}
  248. #define VT100_ALT_ENTER {ASCII_ESC, 'O', 'M'}
  249. /********************************************************************************************
  250. * Public Data
  251. ********************************************************************************************/
  252. /********************************************************************************************
  253. * Public Function Prototypes
  254. ********************************************************************************************/
  255. #endif /* __INCLUDE_NUTTX_VT100_H */