xref: /vim-8.2.3635/src/ascii.h (revision 9bf703d4)
1 /* vi:set ts=8 sts=4 sw=4 noet:
2  *
3  * VIM - Vi IMproved	by Bram Moolenaar
4  *
5  * Do ":help uganda"  in Vim to read copying and usage conditions.
6  * Do ":help credits" in Vim to see a list of people who contributed.
7  */
8 
9 /*
10  * Definitions of various common control characters.
11  * For EBCDIC we have to use different values.
12  */
13 
14 #ifndef EBCDIC
15 
16 // IF_EB(ASCII_constant, EBCDIC_constant)
17 #define IF_EB(a, b)	a
18 
19 #define CharOrd(x)	((x) < 'a' ? (x) - 'A' : (x) - 'a')
20 #define CharOrdLow(x)	((x) - 'a')
21 #define CharOrdUp(x)	((x) - 'A')
22 #define ROT13(c, a)	(((((c) - (a)) + 13) % 26) + (a))
23 
24 #define NUL		'\000'
25 #define BELL		'\007'
26 #define BS		'\010'
27 #define TAB		'\011'
28 #define NL		'\012'
29 #define NL_STR		(char_u *)"\012"
30 #define FF		'\014'
31 #define CAR		'\015'	// CR is used by Mac OS X
32 #define ESC		'\033'
33 #define ESC_STR		(char_u *)"\033"
34 #define ESC_STR_nc	"\033"
35 #define DEL		0x7f
36 #define DEL_STR		(char_u *)"\177"
37 
38 #define POUND		0xA3
39 
40 #define Ctrl_chr(x)	(TOUPPER_ASC(x) ^ 0x40) // '?' -> DEL, '@' -> ^@, etc.
41 #define Meta(x)		((x) | 0x80)
42 
43 #define CTRL_F_STR	"\006"
44 #define CTRL_H_STR	"\010"
45 #define CTRL_V_STR	"\026"
46 
47 #define Ctrl_AT		0   // @
48 #define Ctrl_A		1
49 #define Ctrl_B		2
50 #define Ctrl_C		3
51 #define Ctrl_D		4
52 #define Ctrl_E		5
53 #define Ctrl_F		6
54 #define Ctrl_G		7
55 #define Ctrl_H		8
56 #define Ctrl_I		9
57 #define Ctrl_J		10
58 #define Ctrl_K		11
59 #define Ctrl_L		12
60 #define Ctrl_M		13
61 #define Ctrl_N		14
62 #define Ctrl_O		15
63 #define Ctrl_P		16
64 #define Ctrl_Q		17
65 #define Ctrl_R		18
66 #define Ctrl_S		19
67 #define Ctrl_T		20
68 #define Ctrl_U		21
69 #define Ctrl_V		22
70 #define Ctrl_W		23
71 #define Ctrl_X		24
72 #define Ctrl_Y		25
73 #define Ctrl_Z		26
74 			    // CTRL- [ Left Square Bracket == ESC
75 #define Ctrl_BSL	28  // \ BackSLash
76 #define Ctrl_RSB	29  // ] Right Square Bracket
77 #define Ctrl_HAT	30  // ^
78 #define Ctrl__		31
79 
80 #else
81 
82 // EBCDIC
83 
84 // IF_EB(ASCII_constant, EBCDIC_constant)
85 #define IF_EB(a, b)	b
86 
87 /*
88  * Finding the position in the alphabet is not straightforward in EBCDIC.
89  * There are gaps in the code table.
90  * 'a' + 1 == 'b', but: 'i' + 7 == 'j' and 'r' + 8 == 's'
91  */
92 #define CharOrd__(c) ((c) < ('j' - 'a') ? (c) : ((c) < ('s' - 'a') ? (c) - 7 : (c) - 7 - 8))
93 #define CharOrdLow(x) (CharOrd__((x) - 'a'))
94 #define CharOrdUp(x) (CharOrd__((x) - 'A'))
95 #define CharOrd(x) (isupper(x) ? CharOrdUp(x) : CharOrdLow(x))
96 
97 #define EBCDIC_CHAR_ADD_(x) ((x) < 0?'a':(x)>25?'z':"abcdefghijklmnopqrstuvwxyz"[x])
98 #define EBCDIC_CHAR_ADD(c,s) (isupper(c) ? toupper(EBCDIC_CHAR_ADD_(CharOrdUp(c)+(s))) : EBCDIC_CHAR_ADD_(CharOrdLow(c)+(s)))
99 
100 #define R13_(c) ("abcdefghijklmnopqrstuvwxyz"[((c) + 13) % 26])
101 #define ROT13(c, a)  (isupper(c) ? toupper(R13_(CharOrdUp(c))) : R13_(CharOrdLow(c)))
102 
103 #define NUL		'\000'
104 #define BELL		'\x2f'
105 #define BS		'\x16'
106 #define TAB		'\x05'
107 #define NL		'\x15'
108 #define NL_STR		(char_u *)"\x15"
109 #define FF		'\x0C'
110 #define CAR		'\x0D'
111 #define ESC		'\x27'
112 #define ESC_STR		(char_u *)"\x27"
113 #define ESC_STR_nc	"\x27"
114 #define DEL		0x07
115 #define DEL_STR		(char_u *)"\007"
116 
117 #define POUND		0xB1
118 
119 #define CTRL_F_STR	"\056"
120 #define CTRL_H_STR	"\026"
121 #define CTRL_V_STR	"\062"
122 
123 #define Ctrl_AT		0x00   // @
124 #define Ctrl_A		0x01
125 #define Ctrl_B		0x02
126 #define Ctrl_C		0x03
127 #define Ctrl_D		0x37
128 #define Ctrl_E		0x2D
129 #define Ctrl_F		0x2E
130 #define Ctrl_G		0x2F
131 #define Ctrl_H		0x16
132 #define Ctrl_I		0x05
133 #define Ctrl_J		0x15
134 #define Ctrl_K		0x0B
135 #define Ctrl_L		0x0C
136 #define Ctrl_M		0x0D
137 #define Ctrl_N		0x0E
138 #define Ctrl_O		0x0F
139 #define Ctrl_P		0x10
140 #define Ctrl_Q		0x11
141 #define Ctrl_R		0x12
142 #define Ctrl_S		0x13
143 #define Ctrl_T		0x3C
144 #define Ctrl_U		0x3D
145 #define Ctrl_V		0x32
146 #define Ctrl_W		0x26
147 #define Ctrl_X		0x18
148 #define Ctrl_Y		0x19
149 #define Ctrl_Z		0x3F
150 			    // CTRL- [ Left Square Bracket == ESC
151 #define Ctrl_RSB	0x1D  // ] Right Square Bracket
152 #define Ctrl_BSL	0x1C  // \ BackSLash
153 #define Ctrl_HAT	0x1E  // ^
154 #define Ctrl__		0x1F
155 
156 #define Ctrl_chr(x)	(CtrlTable[(x)])
157 extern char CtrlTable[];
158 
159 #define CtrlChar(x)	((x < ' ') ? CtrlCharTable[(x)] : 0)
160 extern char CtrlCharTable[];
161 
162 #define MetaChar(x)	((x < ' ') ? MetaCharTable[(x)] : 0)
163 extern char MetaCharTable[];
164 
165 #endif // defined EBCDIC
166 
167 // TODO: EBCDIC Code page dependent (here 1047)
168 #define CSI		0x9b	// Control Sequence Introducer
169 #define CSI_STR		"\233"
170 #define DCS		0x90	// Device Control String
171 #define OSC		0x9d	// Operating System Command
172 #define STERM		0x9c	// String Terminator
173 
174 /*
175  * Character that separates dir names in a path.
176  * For MS-DOS, WIN32 and OS/2 we use a backslash.  A slash mostly works
177  * fine, but there are places where it doesn't (e.g. in a command name).
178  * For Acorn we use a dot.
179  */
180 #ifdef BACKSLASH_IN_FILENAME
181 # define PATHSEP	psepc
182 # define PATHSEPSTR	pseps
183 #else
184 # define PATHSEP	'/'
185 # define PATHSEPSTR	"/"
186 #endif
187