/////////////////////////////////////////////////////////////////////// //// //// This file contains macros for interfacing with Video terminal //// emulators like VT52, VT100, and ANSI(HyperTerminal) /////////////////////////////////////////////////////////////////////// //// Author: John Myers //// Compiler: C51 //// IDE: Keil uVision3 //// Created: 27May07 //// File name: vterm.h /////////////////////////////////////////////////////////////////////// #ifndef VTERM_H #define VTERM_H /*---------------Example------------------* vterm_set_color(FOREGROUND,BLUE); vterm_set_color(BACKGROUND,WHITE); vterm_clr_screen(); vterm_cur_home('0','2'); ///param1=horz param2=vert vterm_set_mode(MODE_UNDERLINE); *----------------------------------------*/ //*************************** // Macros //*************************** /** Send escape sequence start */ #define send_esc_seq() \ while (!TI); \ TI = 0; \ SBUF = 27; \ while (!TI); \ TI = 0; \ SBUF = '[' \ #define vterm_cur_home(x,y) \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = y; \ while (!TI); \ TI = 0; \ SBUF = ';'; \ while (!TI); \ TI = 0; \ SBUF = x; \ while (!TI); \ TI = 0; \ SBUF = MOVE_TO \ ///Clears the Screen and goes home. #define vterm_reset() \ while (!TI); \ TI = 0; \ SBUF = 27; \ while (!TI); \ TI = 0; \ SBUF = 'c' \ ///Erase from current line down #define vterm_erase_down() \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = 'J' \ ///Erase from current line up #define vterm_erase_up() \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = '1'; \ while (!TI); \ TI = 0; \ SBUF = 'J' \ #define vterm_clr_screen() \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = '2'; \ while (!TI); \ TI = 0; \ SBUF = 'J' \ #define vterm_set_color(fb,c) \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = fb; \ while (!TI); \ TI = 0; \ SBUF = c; \ while (!TI); \ TI = 0; \ SBUF = 'm' \ #define vterm_set_mode(mode) \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = mode; \ while (!TI); \ TI = 0; \ SBUF = 'm' /// Auto repeat DECARM On ESC [ ? 8 h //-On /// Auto repeat DECARM Off ESC [ ? 8 l //-Off /* #define vterm_auto_repeat(r) \ send_esc_seq(); \ while (!TI); \ TI = 0; \ SBUF = '?'; \ while (!TI); \ TI = 0; \ SBUF = '8'; \ while (!TI); \ TI = 0; \ SBUF = r \ */ #define KEY_F1 0x1B4F5000 //-'ESC','O','P' #define KEY_F2 0x1B4F5100 //-'ESC','O','Q' #define KEY_F3 0x1B4F5200 //-'ESC','O','R' #define KEY_F4 0x1B4F5300 //-'ESC','O','S' #define KEY_UP_ARROW 0x1B5B4100 //-'ESC','[','A' #define KEY_DOWN_ARROW 0x1B5B4200 //-'ESC','[','B' #define KEY_RIGHT_ARROW 0x1B5B4300 //-'ESC','[','C' #define KEY_LEFT_ARROW 0x1B5B4400 //-'ESC','[','D' /* * Text modes */ #define MODE_NONE '0' #define MODE_BOLD '1' #define MODE_DIM '2' #define MODE_UNDERLINE '4' #define MODE_BLINK '5' #define MODE_REVERSED '7' #define MODE_CONCEALED '8' /* * Text colors */ enum vt_color_enum { FOREGROUND = '3', BACKGROUND = '4', BLACK = '0', RED = '1', GREEN = '2', YELLOW = '3', BLUE = '4', MAGENTA = '5', CYAN = '6', WHITE = '7', }; typedef enum vt_color_enum color; /* * Cursor movement * */ enum vt_cursor_enum { MOVE_UP = 'A', MOVE_DOWN = 'B', MOVE_RIGHT = 'C', MOVE_LEFT = 'D', MOVE_TO = 'H', SAVE_POS = 's', UNSAVE_POS = 'u', SAVE_POS_ATRIB = '7', RESTORE_POS_ATRIB = '8' }; typedef enum vt_cursor_enum CUR; #endif //-VTERM_H