#ifndef DEF_VITRUALTERMINAL_IFACE_H
#define DEF_VITRUALTERMINAL_IFACE_H
#define VTIF_OBJTYPE 0x10
//S = static, GET = get, PR = process, IN/OUT : in/out, VT = virtualterminal
#define VTIF_SGETPRINVT 6 //Get process input virtual terminal (R) | no arguments
#define VTIF_SGETPROUTVT 7 //Get process output virtual terminal (R) | no arguments
#define VTIF_PUT 0x01 //Put one character to virtual terminal (v) | c:character
#define VTIF_WRITE 0x02 //Write a string (v) | S:string
/* EVERYTHING NOW GOES THROUGH VTIF_WRITE
#define VTIF_WRITEHEX 0x03 //Write a number in hexadecimal (v) | i:number
#define VTIF_WRITEDEC 0x04 //Write a number in decimal (v) | j:number, J:number
*/
#define VTIF_READLINE 0x05 //Reads a line from virtual terminal (S) : b:show?
#define VTIF_GETKEYPRESS 0x06 //Get a keypress from virtual terminal (*) : i:flags
//Takes two flags : 1<<0 = show, 1<<1 = block
/* EVERYTHING NOW GOES THROUGH VTIF_WRITE
#define VTIF_SETCOLOR 0x10 //Set text color (v) | i:foreground_color, i:backgrond_color
#define VTIF_SETCSRLINE 0x11 //Set cursor line (v) | i:line
#define VTIF_SETCSRCOL 0x12 //Set cursor column (v) | i:column
#define VTIF_LOCATE 0x13 //Sets cursor position (v) | i:line, i:column
*/
#define VTIF_ISBOXED 0x13 //Is VT boxed ? (b) | no arguments
#define VTIF_GETHEIGHT 0x1A //Get VT width (i) | no arguments
#define VTIF_GETWIDTH 0x1B //Get VT height (i) | no arguments
// ***** MELON VT SPECIFIC ESCAPE COMMANDS **
#define MVT_ESC "\032"
struct mvt_esc_cmd_t {
int cmd;
int a, b;
};
#define MVTCMD0(name, command) \
inline mvt_esc_cmd_t name() { \
mvt_esc_cmd_t ret; ret.cmd = command; return ret; }
#define MVTCMD1(name, command) \
inline mvt_esc_cmd_t name(int a) { \
mvt_esc_cmd_t ret; ret.cmd = command; ret.a = a; return ret; }
#define MVTCMD2(name, command) \
inline mvt_esc_cmd_t name(int a, int b) { \
mvt_esc_cmd_t ret; ret.cmd = command; ret.a = a; ret.b = b; return ret; }
#define MVTCMD_CLEAR 0x100
#define MVTCMD_SCROLL 0x101
#define MVTCMD_SETCOLOR 0x110
#define MVTCMD_SETBGCOLOR 0x111
#define MVTCMD_SETFGCOLOR 0x112
#define MVTCMD_MOVECSR 0x120
#define MVTCMD_SETCSRLIN 0x121
#define MVTCMD_SETCSRCOL 0x122
#define MVTCMD_HIDECSR 0x130
#define MVTCMD_SHOWCSR 0x131
namespace MVT {
MVTCMD0(clear, MVTCMD_CLEAR);
MVTCMD0(scroll, MVTCMD_SCROLL);
MVTCMD2(setcolor, MVTCMD_SETCOLOR);
MVTCMD1(setbgcolor, MVTCMD_SETBGCOLOR);
MVTCMD1(setfgcolor, MVTCMD_SETFGCOLOR);
MVTCMD2(movecsr, MVTCMD_MOVECSR);
MVTCMD1(setcsrlin, MVTCMD_SETCSRLIN);
MVTCMD1(setcsrcol, MVTCMD_SETCSRCOL);
MVTCMD0(hidecsr, MVTCMD_HIDECSR);
MVTCMD0(showcsr, MVTCMD_SHOWCSR);
}
#endif