summaryrefslogtreecommitdiff
path: root/src/ansi.h
blob: 72992b4ec816b1be9e02601ba4af31733f09e6fc (plain)
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