annotate src/macros.h @ 4444:ccecb03e5e8b v7.3.970

updated for version 7.3.970 Problem: Syntax highlighting can be slow. Solution: Include the NFA regexp engine. Add the 'regexpengine' option to select which one is used. (various authors, including Ken Takata, Andrei Aiordachioaie, Russ Cox, Xiaozhou Liua, Ian Young)
author Bram Moolenaar <bram@vim.org>
date Sun, 19 May 2013 19:40:29 +0200
parents c612d154bcdd
children 66803af09906
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 * macros.h: macro definitions for often used code
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 */
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 * pchar(lp, c) - put character 'c' at position 'lp'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 #define pchar(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 * Position comparisons
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 # define lt(a, b) (((a).lnum != (b).lnum) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 ? (a).lnum < (b).lnum \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 : (a).col != (b).col \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 ? (a).col < (b).col \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 : (a).coladd < (b).coladd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 # define ltp(a, b) (((a)->lnum != (b)->lnum) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 ? (a)->lnum < (b)->lnum \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 : (a)->col != (b)->col \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 ? (a)->col < (b)->col \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 : (a)->coladd < (b)->coladd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 # define equalpos(a, b) (((a).lnum == (b).lnum) && ((a).col == (b).col) && ((a).coladd == (b).coladd))
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 492
diff changeset
33 # define clearpos(a) {(a)->lnum = 0; (a)->col = 0; (a)->coladd = 0;}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 # define lt(a, b) (((a).lnum != (b).lnum) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 ? ((a).lnum < (b).lnum) : ((a).col < (b).col))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 # define ltp(a, b) (((a)->lnum != (b)->lnum) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 ? ((a)->lnum < (b)->lnum) : ((a)->col < (b)->col))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 # define equalpos(a, b) (((a).lnum == (b).lnum) && ((a).col == (b).col))
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 492
diff changeset
40 # define clearpos(a) {(a)->lnum = 0; (a)->col = 0;}
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 #define ltoreq(a, b) (lt(a, b) || equalpos(a, b))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 * lineempty() - return TRUE if the line is empty
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 #define lineempty(p) (*ml_get(p) == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 * bufempty() - return TRUE if the current buffer is empty
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 #define bufempty() (curbuf->b_ml.ml_line_count == 1 && *ml_get((linenr_T)1) == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 * toupper() and tolower() that use the current locale.
1365
79a23c19108a updated for version 7.1-079
vimboss
parents: 1199
diff changeset
57 * On some systems toupper()/tolower() only work on lower/uppercase
79a23c19108a updated for version 7.1-079
vimboss
parents: 1199
diff changeset
58 * characters, first use islower() or isupper() then.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 * Careful: Only call TOUPPER_LOC() and TOLOWER_LOC() with a character in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 * range 0 - 255. toupper()/tolower() on some systems can't handle others.
1365
79a23c19108a updated for version 7.1-079
vimboss
parents: 1199
diff changeset
61 * Note: It is often better to use MB_TOLOWER() and MB_TOUPPER(), because many
79a23c19108a updated for version 7.1-079
vimboss
parents: 1199
diff changeset
62 * toupper() and tolower() implementations only work for ASCII.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 #ifdef MSWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 # define TOUPPER_LOC(c) toupper_tab[(c) & 255]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 # define TOLOWER_LOC(c) tolower_tab[(c) & 255]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 # ifdef BROKEN_TOUPPER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 # define TOUPPER_LOC(c) (islower(c) ? toupper(c) : (c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 # define TOLOWER_LOC(c) (isupper(c) ? tolower(c) : (c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 # define TOUPPER_LOC toupper
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 # define TOLOWER_LOC tolower
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 /* toupper() and tolower() for ASCII only and ignore the current locale. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 #ifdef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 # define TOUPPER_ASC(c) (islower(c) ? toupper(c) : (c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 # define TOLOWER_ASC(c) (isupper(c) ? tolower(c) : (c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 # define TOUPPER_ASC(c) (((c) < 'a' || (c) > 'z') ? (c) : (c) - ('a' - 'A'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 # define TOLOWER_ASC(c) (((c) < 'A' || (c) > 'Z') ? (c) : (c) + ('a' - 'A'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 * MB_ISLOWER() and MB_ISUPPER() are to be used on multi-byte characters. But
492
81c06952fb1d updated for version 7.0135
vimboss
parents: 474
diff changeset
88 * don't use them for negative values!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 #ifdef FEAT_MBYTE
492
81c06952fb1d updated for version 7.0135
vimboss
parents: 474
diff changeset
91 # define MB_ISLOWER(c) vim_islower(c)
81c06952fb1d updated for version 7.0135
vimboss
parents: 474
diff changeset
92 # define MB_ISUPPER(c) vim_isupper(c)
81c06952fb1d updated for version 7.0135
vimboss
parents: 474
diff changeset
93 # define MB_TOLOWER(c) vim_tolower(c)
81c06952fb1d updated for version 7.0135
vimboss
parents: 474
diff changeset
94 # define MB_TOUPPER(c) vim_toupper(c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 # define MB_ISLOWER(c) islower(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 # define MB_ISUPPER(c) isupper(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 # define MB_TOLOWER(c) TOLOWER_LOC(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 # define MB_TOUPPER(c) TOUPPER_LOC(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 /* Like isalpha() but reject non-ASCII characters. Can't be used with a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 * special key (negative value). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 #ifdef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 # define ASCII_ISALPHA(c) isalpha(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 # define ASCII_ISALNUM(c) isalnum(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 # define ASCII_ISLOWER(c) islower(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 # define ASCII_ISUPPER(c) isupper(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 # define ASCII_ISALPHA(c) ((c) < 0x7f && isalpha(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 # define ASCII_ISALNUM(c) ((c) < 0x7f && isalnum(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 # define ASCII_ISLOWER(c) ((c) < 0x7f && islower(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 # define ASCII_ISUPPER(c) ((c) < 0x7f && isupper(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 /* Use our own isdigit() replacement, because on MS-Windows isdigit() returns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 * non-zero for superscript 1. Also avoids that isdigit() crashes for numbers
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 * below 0 and above 255. For complicated arguments and in/decrement use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 * vim_isdigit() instead. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 #define VIM_ISDIGIT(c) ((c) >= '0' && (c) <= '9')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 /* macro version of chartab().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 * Only works with values 0-255!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 * Doesn't work for UTF-8 mode with chars >= 0x80. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 #define CHARSIZE(c) (chartab[c] & CT_CELL_MASK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 #ifdef FEAT_LANGMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 * Adjust chars in a language according to 'langmap' option.
1811
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
130 * NOTE that there is no noticeable overhead if 'langmap' is not set.
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
131 * When set the overhead for characters < 256 is small.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 * Don't apply 'langmap' if the character comes from the Stuff buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 * The do-while is just to ignore a ';' after the macro.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 */
1811
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
135 # ifdef FEAT_MBYTE
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
136 # define LANGMAP_ADJUST(c, condition) \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
137 do { \
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2244
diff changeset
138 if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \
1811
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
139 { \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
140 if ((c) < 256) \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
141 c = langmap_mapchar[c]; \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
142 else \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
143 c = langmap_adjust_mb(c); \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
144 } \
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 } while (0)
1811
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
146 # else
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
147 # define LANGMAP_ADJUST(c, condition) \
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
148 do { \
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2244
diff changeset
149 if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2244
diff changeset
150 c = langmap_mapchar[c]; \
1811
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
151 } while (0)
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
152 # endif
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
153 #else
d88bdbabfbc6 updated for version 7.2-109
vimboss
parents: 1365
diff changeset
154 # define LANGMAP_ADJUST(c, condition) /* nop */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 * vim_isbreak() is used very often if 'linebreak' is set, use a macro to make
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 * it work fast.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 #define vim_isbreak(c) (breakat_flags[(char_u)(c)])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 * On VMS file names are different and require a translation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 * On the Mac open() has only two arguments.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 #ifdef VMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 # define mch_access(n, p) access(vms_fixfilename(n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 /* see mch_open() comment */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 # define mch_fopen(n, p) fopen(vms_fixfilename(n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 # define mch_fstat(n, p) fstat(vms_fixfilename(n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 /* VMS does not have lstat() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 # define mch_stat(n, p) stat(vms_fixfilename(n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 # ifndef WIN32
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 # define mch_access(n, p) access((n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 # if !(defined(FEAT_MBYTE) && defined(WIN3264))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 # define mch_fopen(n, p) fopen((n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 # define mch_fstat(n, p) fstat((n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 # ifdef MSWIN /* has it's own mch_stat() function */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 # define mch_stat(n, p) vim_stat((n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 # ifdef STAT_IGNORES_SLASH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 /* On Solaris stat() accepts "file/" as if it was "file". Return -1 if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 * the name ends in "/" and it's not a directory. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 # define mch_stat(n, p) (illegal_slash(n) ? -1 : stat((n), (p)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 # define mch_stat(n, p) stat((n), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194
21
db5102f7e29f updated for version 7.0013
vimboss
parents: 13
diff changeset
195 #ifdef HAVE_LSTAT
db5102f7e29f updated for version 7.0013
vimboss
parents: 13
diff changeset
196 # define mch_lstat(n, p) lstat((n), (p))
db5102f7e29f updated for version 7.0013
vimboss
parents: 13
diff changeset
197 #else
db5102f7e29f updated for version 7.0013
vimboss
parents: 13
diff changeset
198 # define mch_lstat(n, p) mch_stat((n), (p))
db5102f7e29f updated for version 7.0013
vimboss
parents: 13
diff changeset
199 #endif
db5102f7e29f updated for version 7.0013
vimboss
parents: 13
diff changeset
200
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 #ifdef MACOS_CLASSIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 /* MacOS classic doesn't support perm but MacOS X does. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 # define mch_open(n, m, p) open((n), (m))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 # ifdef VMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 * It is possible to force some record format with:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 * # define mch_open(n, m, p) open(vms_fixfilename(n), (m), (p)), "rat=cr", "rfm=stmlf", "mrs=0")
1199
3acf7c922a04 updated for version 7.1b
vimboss
parents: 961
diff changeset
209 * but it is not recommended, because it can destroy indexes etc.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 # define mch_open(n, m, p) open(vms_fixfilename(n), (m), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 # if !(defined(FEAT_MBYTE) && defined(WIN3264))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 # define mch_open(n, m, p) open((n), (m), (p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 /* mch_open_rw(): invoke mch_open() with third argument for user R/W. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 #if defined(UNIX) || defined(VMS) /* open in rw------- mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 # define mch_open_rw(n, f) mch_open((n), (f), (mode_t)0600)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 # if defined(MSDOS) || defined(MSWIN) || defined(OS2) /* open read/write */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 # define mch_open_rw(n, f) mch_open((n), (f), S_IREAD | S_IWRITE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 # define mch_open_rw(n, f) mch_open((n), (f), 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 #ifdef STARTUPTIME
1972
82f866f19e91 updated for version 7.2-269
vimboss
parents: 1883
diff changeset
231 # define TIME_MSG(s) { if (time_fd != NULL) time_msg(s, NULL); }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 # define TIME_MSG(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 #ifdef FEAT_VREPLACE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 # define REPLACE_NORMAL(s) (((s) & REPLACE_FLAG) && !((s) & VREPLACE_FLAG))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 # define REPLACE_NORMAL(s) ((s) & REPLACE_FLAG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 # define UTF_COMPOSINGLIKE(p1, p2) utf_composinglike((p1), (p2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 # define UTF_COMPOSINGLIKE(p1, p2) utf_iscomposing(utf_ptr2char(p2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 /* Whether to draw the vertical bar on the right side of the cell. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 # define CURSOR_BAR_RIGHT (curwin->w_p_rl && (!(State & CMDLINE) || cmdmsg_rl))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 #endif
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 7
diff changeset
252
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
253 /*
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
254 * mb_ptr_adv(): advance a pointer to the next character, taking care of
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
255 * multi-byte characters if needed.
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
256 * mb_ptr_back(): backup a pointer to the previous character, taking care of
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
257 * multi-byte characters if needed.
98
98435a8ddb09 updated for version 7.0038
vimboss
parents: 39
diff changeset
258 * MB_COPY_CHAR(f, t): copy one char from "f" to "t" and advance the pointers.
456
c4d200412ae9 updated for version 7.0121
vimboss
parents: 377
diff changeset
259 * PTR2CHAR(): get character from pointer.
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
260 */
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
261 #ifdef FEAT_MBYTE
3693
c612d154bcdd updated for version 7.3.606
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
262 /* Get the length of the character p points to */
c612d154bcdd updated for version 7.3.606
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
263 # define MB_PTR2LEN(p) (has_mbyte ? (*mb_ptr2len)(p) : 1)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
264 /* Advance multi-byte pointer, skip over composing chars. */
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
265 # define mb_ptr_adv(p) p += has_mbyte ? (*mb_ptr2len)(p) : 1
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
266 /* Advance multi-byte pointer, do not skip over composing chars. */
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
267 # define mb_cptr_adv(p) p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
268 /* Backup multi-byte pointer. */
377
0fd7ac767ecd updated for version 7.0098
vimboss
parents: 325
diff changeset
269 # define mb_ptr_back(s, p) p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
270 /* get length of multi-byte char, not including composing chars */
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
271 # define mb_cptr2len(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
272
98
98435a8ddb09 updated for version 7.0038
vimboss
parents: 39
diff changeset
273 # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1811
diff changeset
274 # define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
275 # define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p))
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
276 #else
3693
c612d154bcdd updated for version 7.3.606
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
277 # define MB_PTR2LEN(p) 1
456
c4d200412ae9 updated for version 7.0121
vimboss
parents: 377
diff changeset
278 # define mb_ptr_adv(p) ++p
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
279 # define mb_cptr_adv(p) ++p
456
c4d200412ae9 updated for version 7.0121
vimboss
parents: 377
diff changeset
280 # define mb_ptr_back(s, p) --p
c4d200412ae9 updated for version 7.0121
vimboss
parents: 377
diff changeset
281 # define MB_COPY_CHAR(f, t) *t++ = *f++
c4d200412ae9 updated for version 7.0121
vimboss
parents: 377
diff changeset
282 # define MB_CHARLEN(p) STRLEN(p)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 456
diff changeset
283 # define PTR2CHAR(p) ((int)*(p))
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 21
diff changeset
284 #endif
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 698
diff changeset
285
c06c658691e2 updated for version 7.0-087
vimboss
parents: 698
diff changeset
286 #ifdef FEAT_AUTOCHDIR
c06c658691e2 updated for version 7.0-087
vimboss
parents: 698
diff changeset
287 # define DO_AUTOCHDIR if (p_acd) do_autochdir();
c06c658691e2 updated for version 7.0-087
vimboss
parents: 698
diff changeset
288 #else
c06c658691e2 updated for version 7.0-087
vimboss
parents: 698
diff changeset
289 # define DO_AUTOCHDIR
c06c658691e2 updated for version 7.0-087
vimboss
parents: 698
diff changeset
290 #endif
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
291
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
292 #if defined(FEAT_SCROLLBIND) && defined(FEAT_CURSORBIND)
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
293 # define RESET_BINDING(wp) (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
294 #else
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
295 # if defined(FEAT_SCROLLBIND)
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
296 # define RESET_BINDING(wp) (wp)->w_p_scb = FALSE
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
297 # else
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
298 # if defined(FEAT_CURSORBIND)
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
299 # define RESET_BINDING(wp) (wp)->w_p_crb = FALSE
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
300 # else
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
301 # define RESET_BINDING(wp)
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
302 # endif
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
303 # endif
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
304 #endif