1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
/* Copyright (c) 2008, 2009
* Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
* Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
* Micah Cowan (micah@cowan.name)
* Sadrul Habib Chowdhury (sadrul@users.sourceforge.net)
* Copyright (c) 1993-2002, 2003, 2005, 2006, 2007
* Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
* Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
* Copyright (c) 1987 Oliver Laumann
*
* 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 3, 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 (see the file COPYING); if not, see
* http://www.gnu.org/licenses/, or contact Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*
****************************************************************
* $Id$ GNU
*/
#define NATTR 6
#define ATTR_DI 0 /* Dim mode */
#define ATTR_US 1 /* Underscore mode */
#define ATTR_BD 2 /* Bold mode */
#define ATTR_RV 3 /* Reverse mode */
#define ATTR_SO 4 /* Standout mode */
#define ATTR_BL 5 /* Blinking */
#define A_DI (1<<ATTR_DI)
#define A_US (1<<ATTR_US)
#define A_BD (1<<ATTR_BD)
#define A_RV (1<<ATTR_RV)
#define A_SO (1<<ATTR_SO)
#define A_BL (1<<ATTR_BL)
#define A_MAX (1<<(NATTR-1))
#define ATYP_M (1<<0)
#define ATYP_S (1<<1)
#define ATYP_U (1<<2)
#ifdef COLORS16
/* pseudo attributes */
# define ATTR_BFG 6 /* bright foreground */
# define ATTR_BBG 7 /* bright background */
# define A_BFG (1<<ATTR_BFG)
# define A_BBG (1<<ATTR_BBG)
#endif
/*
* Parser state
*/
/* keep state_t and state_t_string in sync! */
enum state_t
{
LIT, /* Literal input */
ESC, /* Start of escape sequence */
ASTR, /* Start of control string */
STRESC, /* ESC seen in control string */
CSI, /* Reading arguments in "CSI Pn ;...*/
PRIN, /* Printer mode */
PRINESC, /* ESC seen in printer mode */
PRINCSI, /* CSI seen in printer mode */
PRIN4 /* CSI 4 seen in printer mode */
};
/* keep string_t and string_t_string in sync! */
enum string_t
{
NONE,
DCS, /* Device control string */
OSC, /* Operating system command */
APC, /* Application program command */
/* - used for status change */
PM, /* Privacy message */
AKA, /* title for current screen */
GM, /* Global message to every display */
STATUS /* User hardstatus line */
};
/*
* Types of movement used by GotoPos()
*/
enum move_t {
M_NONE,
M_UP,
M_CUP,
M_DO,
M_CDO,
M_LE,
M_CLE,
M_RI,
M_CRI,
M_RW,
M_CR /* CR and rewrite */
};
#define EXPENSIVE 1000
#define G0 0
#define G1 1
#define G2 2
#define G3 3
#define ASCII 0
#ifdef TOPSTAT
#define STATLINE (0)
#else
#define STATLINE (D_height-1)
#endif
#ifdef ENCODINGS
#define KANJI ('B' & 037)
#define KANJI0212 ('D' & 037)
#define KANA 'I'
#define EUC_JP 1
#define SJIS 2
#define EUC_KR 3
#define EUC_CN 4
#define BIG5 5
#define KOI8R 6
#define CP1251 7
#define GBK 20
#define EUC EUC_JP
#endif
#ifdef UTF8
#undef UTF8
#define UTF8 8
#endif
#ifdef UTF8
# define UCS_REPL 0xfffd /* character for illegal codes */
# define UCS_REPL_DW 0xff1f /* character for illegal codes */
# define UCS_HIDDEN 0xffff
#endif
#ifdef DW_CHARS
# define is_dw_font(f) ((f) && ((f) & 0x60) == 0)
# ifdef UTF8
# define dw_left(ml, x, enc) ((enc == UTF8) ? \
(unsigned char)(ml)->font[(x) + 1] == 0xff && (unsigned char)(ml)->image[(x) + 1] == 0xff : \
((unsigned char)(ml)->font[x] & 0x1f) != 0 && ((unsigned char)(ml)->font[x] & 0xe0) == 0 \
)
# define dw_right(ml, x, enc) ((enc == UTF8) ? \
(unsigned char)(ml)->font[x] == 0xff && (unsigned char)(ml)->image[x] == 0xff : \
((unsigned char)(ml)->font[x] & 0xe0) == 0x80 \
)
# else
# define dw_left(ml, x, enc) ( \
((unsigned char)(ml)->font[x] & 0x1f) != 0 && ((unsigned char)(ml)->font[x] & 0xe0) == 0 \
)
# define dw_right(ml, x, enc) ( \
((unsigned char)(ml)->font[x] & 0xe0) == 0x80 \
)
# endif /* UTF8 */
#else
# define dw_left(ml, x, enc) 0
# define dw_right(ml, x, enc) 0
#endif
|