annotate src/ascii.h @ 7199:799095feea6d

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