summaryrefslogtreecommitdiff
path: root/src/common/fqterm.h
diff options
context:
space:
mode:
authoriroul <iroul@iroul-VirtualBox.(none)>2014-04-04 07:35:14 -0700
committeriroul <iroul@iroul-VirtualBox.(none)>2014-04-04 07:35:14 -0700
commitafd34f2893a06a3aecf17e8e83b1df6ed2ae91a2 (patch)
tree851102abc55d91a1b76e63e9e89f9a7733da95b5 /src/common/fqterm.h
parentc4b028ad53f7b362a864de24828d7cc39ff67b0a (diff)
downloadfqterm-afd34f2893a06a3aecf17e8e83b1df6ed2ae91a2.tar.xz
move to my github.
Diffstat (limited to 'src/common/fqterm.h')
-rw-r--r--src/common/fqterm.h350
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