diff options
author | iroul <iroul@iroul-VirtualBox.(none)> | 2014-04-04 07:35:14 -0700 |
---|---|---|
committer | iroul <iroul@iroul-VirtualBox.(none)> | 2014-04-04 07:35:14 -0700 |
commit | afd34f2893a06a3aecf17e8e83b1df6ed2ae91a2 (patch) | |
tree | 851102abc55d91a1b76e63e9e89f9a7733da95b5 /src/common/fqterm.h | |
parent | c4b028ad53f7b362a864de24828d7cc39ff67b0a (diff) | |
download | fqterm-afd34f2893a06a3aecf17e8e83b1df6ed2ae91a2.tar.xz |
move to my github.
Diffstat (limited to 'src/common/fqterm.h')
-rw-r--r-- | src/common/fqterm.h | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/src/common/fqterm.h b/src/common/fqterm.h new file mode 100644 index 0000000..515cedc --- /dev/null +++ b/src/common/fqterm.h @@ -0,0 +1,350 @@ +/*************************************************************************** + * fqterm, a terminal emulator for both BBS and *nix. * + * Copyright (C) 2008 fqterm development group. * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * + ***************************************************************************/ + +#ifndef FQTERM_GLOBAL_H +#define FQTERM_GLOBAL_H + +#ifndef BUFSIZE +#define BUFSIZE (1024) +#endif + +#include <QTextCodec> +#include <QString> +#include "fqterm_trace.h" + +namespace FQTerm { + +#if defined(WIN32) && (_MSC_VER >= 1400) + //Using vc2005 or + +#define fq_strdup _strdup +#else +#define fq_strdup strdup +#endif + +#ifdef FOUND_PYTHON +//#define HAVE_PYTHON +#endif //FOUND_PYTHON + +#define USE_GLOBAL_HOTKEY + +//code convert +enum EncodingID {FQTERM_ENCODING_GBK = 0, FQTERM_ENCODING_BIG5 = 1, + FQTERM_ENCODING_UTF8 = 2, FQTERM_ENCODING_HKSCS = 3, + FQTERM_ENCODING_UAO = 4}; + +#if QT_VERSION >= 0X040700 +#define GBK_CODECS_NAME "GB18030" +#else +#define GBK_CODECS_NAME "GBK" +#endif + +#define G2U(s) ( QTextCodec::codecForName(GBK_CODECS_NAME)->toUnicode(s) ) +#define U2G(s) ( QTextCodec::codecForName(GBK_CODECS_NAME)->fromUnicode(s) ) +#define B2U(s) ( QTextCodec::codecForName("Big5")->toUnicode(s) ) +#define U2B(s) ( QTextCodec::codecForName("Big5")->fromUnicode(s) ) +#define H2U(s) ( QTextCodec::codecForName("Big5-HKSCS")->toUnicode(s) ) +#define U2H(s) ( QTextCodec::codecForName("Big5-HKSCS")->fromUnicode(s) ) +#define U2U8(s) ( s.toUtf8() ) +#define U82U(s) ( QString::fromUtf8(s) ) +#define A2U(s) (QTextCodec::codecForName("UAO")->toUnicode(s) ) +#define U2A(s) ( QTextCodec::codecForName("UAO")->fromUnicode(s) ) + +inline QByteArray unicode2encoding(const QString &text, int encoding) { + switch(encoding) + { + case FQTERM_ENCODING_GBK: + return(U2G(text)); + case FQTERM_ENCODING_BIG5: + return(U2B(text)); + case FQTERM_ENCODING_UTF8: + return(U2U8(text)); + case FQTERM_ENCODING_HKSCS: + return (U2H(text)); + case FQTERM_ENCODING_UAO: + return (U2A(text)); + } + + return ""; +} + +inline QString encoding2unicode(const QByteArray &text, int encoding) { + switch(encoding) + { + case FQTERM_ENCODING_GBK: + return(G2U(text)); + case FQTERM_ENCODING_BIG5: + return(B2U(text)); + case FQTERM_ENCODING_UTF8: + return(U82U(text)); + case FQTERM_ENCODING_HKSCS: + return (H2U(text)); + case FQTERM_ENCODING_UAO: + return (A2U(text)); + } + + return ""; +} + +#define FQTERM_CTRL(c) ((c)&0x1f) + +// every character has a 16-bit description +// low 8 for colors +// hight 8 for attributes +#define COLORMASK 0x00ff +#define ATTRMASK 0xff00 + +// color 8-bit +// bit 0-2 foreground +// 0 black +// 1 red +// 2 green +// 3 yellow +// 4 blue +// 5 magenta +// 6 cyan +// 7 white +// bit 3 highlight foreground +// 0 no +// 1 highlight +// bit 4-6 background +// 0 black +// 1 red +// 2 green +// 3 yellow +// 4 blue +// 5 magenta +// 6 cyan +// 7 white +// bit 7 highlight background (unused) +// 0 no +// 1 highlight + +#define FGMASK 0x0f +#define BGMASK 0xf0 +#define FG_HIGHLIGHT_MASK 0x08 +#define BG_HIGHLIGHT_MASK 0x80 + +//set color +#define SETFG(c) ( (c) & FGMASK ) +#define SETBG(c) ( ( (c) << 4 ) & BGMASK ) +#define SET_FG_HIGHLIGHT(c) ( ( (c) << 3 ) & FG_HIGHLIGHT_MASK ) +#define SET_BG_HIGHLIGHT(c) ( ( (c) << 7 ) & BG_HIGHLIGHT_MASK ) + +//get color +#define GETFG(c) ( (c) & FGMASK ) +#define GETBG(c) ( ( (c) & BGMASK ) >> 4 ) + +#define GET_FG_HIGHLIGHT(c) ( ( (c) & FG_HIGHLIGHT_MASK ) >> 3 ) +#define GET_BG_HIGHLIGHT(c) ( ( (c) & BG_HIGHLIGHT_MASK ) >> 7 ) + +//#define GET_INVERSE_COLOR(c) ( SETFG( (7 - (c & 0x7)) | (c & 0x08) ) | SETBG(15-GETBG(c)) ) +#define GET_INVERSE_COLOR(c) ( SETFG(15-GETFG(c)) | SETBG(15-GETBG(c)) ) + +// mask for attr +#define BRIGHTMASK 0x01 +#define DIMMASK 0x02 +#define UNDERLINEMASK 0x08 +#define BLINKMASK 0x10 +#define RAPIDBLINKMASK 0x20 +#define REVERSEMASK 0x40 +#define INVISIBLEMASK 0x80 + +//set attributes +#define SETBRIGHT(a) ( (a) | BRIGHTMASK ) +#define SETDIM(a) ( (a) | DIMMASK ) +#define SETUNDERLINE(a) ( (a) | UNDERLINEMASK ) +#define SETBLINK(a) ( (a) | BLINKMASK ) +#define SETRAPIDBLINK(a) ( (a) | RAPIDBLINKMASK ) +#define SETREVERSE(a) ( (a) | REVERSEMASK ) +#define SETINVISIBLE(a) ( (a) | INVISIBLEMASK ) + +//get attributes +#define GETBRIGHT(a) ( (a) & BRIGHTMASK ) +#define GETDIM(a) ( (a) & DIMMASK ) +#define GETUNDERLINE(a) ( (a) & UNDERLINEMASK ) +#define GETBLINK(a) ( (a) & BLINKMASK ) +#define GETRAPIDBLINK(a) ( (a) & RAPIDBLINKMASK ) +#define GETREVERSE(a) ( (a) & REVERSEMASK ) +#define GETINVISIBLE(a) ( (a) & INVISIBLEMASK ) + +//default color +#define NO_COLOR ( SETFG(7) | SETBG(0) ) +//default attribute +#define NO_ATTR 0x04 + +// other definations +#ifndef NULL +#define NULL 0 +#endif + +#define DAE_FINISH 10001 +#define DAE_TIMEOUT 10002 + +#define PYE_ERROR 10003 +#define PYE_FINISH 10004 + +// some keys +#define CHAR_NUL 0x00 // ^@ +#define CHAR_ENQ 0x05 // ^E +#define CHAR_BELL 0x07 // ^G +#define CHAR_BS 0x08 // ^H +#define CHAR_TAB 0x09 // ^I +#define CHAR_LF 0x0a // ^J +#define CHAR_VT 0x0b // ^K +#define CHAR_FF 0x0c // ^L +#define CHAR_CR 0x0d // ^M +#define CHAR_SO 0x0e // ^N +#define CHAR_SI 0x0f // ^O +#define CHAR_CAN 0x18 // ^X +#define CHAR_ESC 0x1b // ^[ +#define CHAR_DEL 0x7f // DEL + +#define CHAR_NORMAL -1 + +const char ANSWERBACK_MESSAGE[] = "This is fqterm."; + +// telnet state +#define TSRESOLVING 30 +#define TSHOSTFOUND 31 +#define TSHOSTNOTFOUND 32 +#define TSCONNECTING 33 +#define TSHOSTCONNECTED 34 +#define TSPROXYCONNECTED 35 +#define TSPROXYAUTH 36 +#define TSPROXYFAIL 38 +#define TSREFUSED 39 +#define TSREADERROR 40 +#define TSCLOSED 41 +#define TSCLOSEFINISH 42 +#define TSCONNECTVIAPROXY 43 +#define TSEGETHOSTBYNAME 44 +#define TSEINIWINSOCK 45 +#define TSERROR 46 +#define TSPROXYERROR 47 +#define TSWRITED 48 + +// zmodem types +#define RcvByteCount 0 /* value is # bytes received */ +#define SndByteCount 1 /* value is # bytes sent */ +#define RcvTimeout 2 /* receiver did not respond, aborting */ +#define SndTimeout 3 /* value is # of consecutive send timeouts */ +#define RmtCancel 4 /* remote end has cancelled */ +#define ProtocolErr 5 /* protocol error has occurred, val=hdr */ +#define RemoteMessage 6 /* message from remote end */ +#define DataErr 7 /* data error, val=error count */ +#define FileErr 8 /* error writing file, val=errno */ +#define FileBegin 9 /* file transfer begins, str=name */ +#define FileEnd 10 /* file transfer ends, str=name */ +#define FileSkip 11 /* file being skipped, str=name */ + + +// proxy type +#define NOPROXY 0 +#define WINGATE 1 +#define SOCKS4 2 +#define SOCKS5 3 +#define HTTP 4 + +// UI ID +#define ID_FILE_CONNECT 0x00 +#define ID_FILE_DISCONNECT 0x01 +#define ID_FILE_ADDRESS 0x02 +#define ID_FILE_QUICK 0x03 +#define ID_FILE_EXIT 0x04 + +#define ID_EDIT_COPY 0x10 +#define ID_EDIT_PASTE 0x11 +#define ID_EDIT_COLOR 0x12 +#define ID_EDIT_RECT 0x13 +#define ID_EDIT_AUTO 0x14 +#define ID_EDIT_WW 0x15 + +#define ID_EDIT_ESC_NO 0x17 +#define ID_EDIT_ESC_ESC 0x18 +#define ID_EDIT_ESC_U 0x19 +#define ID_EDIT_ESC_CUS 0x1a + +#define ID_EDIT_CODEC_GBK 0x1b +#define ID_EDIT_CODEC_BIG5 0x1c + + +#define ID_VIEW_FONT 0x20 +#define ID_VIEW_COLOR 0x21 +#define ID_VIEW_REFRESH 0x22 +#define ID_VIEW_LANG 0x23 +#define ID_VIEW_FULL 0x24 +#define ID_VIEW_BOSS 0x25 +#define ID_VIEW_SCROLL_HIDE 0x26 +#define ID_VIEW_SCROLL_LEFT 0x27 +#define ID_VIEW_SCROLL_RIGHT 0x28 +#define ID_VIEW_SWITCH 0x29 +#define ID_VIEW_STATUS 0x3a + +#define ID_OPTION_CURRENT 0x30 +#define ID_OPTION_DEFAULT 0x31 +#define ID_OPTION_PREF 0x32 + +#define ID_SPEC_ANTI 0x40 +#define ID_SPEC_AUTO 0x41 +#define ID_SPEC_MESSAGE 0x42 +#define ID_SPEC_BEEP 0x43 +#define ID_SPEC_MOUSE 0x44 +#define ID_SPEC_ARTICLE 0x45 + +#define ID_SCRIPT_RUN 0x50 +#define ID_SCRIPT_STOP 0x51 + +#define ID_HELP_ABOUT 0x60 +#define ID_HELP_HOMEPAGE 0x61 + +//for open last addr +#define LAST_ADDRESS_INDEX -321 + +//script function names: +#define SFN_ANTI_IDLE "antiIdle" +#define SFN_ON_BELL "onBell" +#define SFN_AUTO_REPLY "autoReply" +#define SFN_DATA_EVENT "dataEvent" +#define SFN_KEY_EVENT "keyEvent" +#define SFN_MOUSE_EVENT "mouseEvent" +#define SFN_DETECT_MENU "detectMenu" + +//script key event type +#define SKET_KEY_PRESS 0 + +//script mouse event type +#define SMET_UNKOWN -1 +#define SMET_MOUSE_PRESS 0 +#define SMET_MOUSE_RELEASE 1 +#define SMET_MOUSE_MOVE 2 +#define SMET_MOUSE_DBCLICK 3 +#define SMET_WHEEL 4 + +//script button state & key modifier +#define SBS_LEFT_BUTTON 0x01 +#define SBS_RIGHT_BUTTON 0x02 +#define SBS_MID_BUTTON 0x04 +#define SBS_ALT 0x08 +#define SBS_CTRL 0x10 +#define SBS_SHIFT 0x20 + +} // namespace FQTerm + +#endif // FQTERM_GLOBAL_H |