Bram Moolenaar | edf3f97 | 2016-08-29 22:49:24 +0200 | [diff] [blame] | 1 | /* vi:set ts=8 sts=4 sw=4 noet: |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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 |
Bram Moolenaar | 7fae636 | 2005-06-30 22:06:41 +0000 | [diff] [blame] | 74 | /* CTRL- [ Left Square Bracket == ESC*/ |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 116 | |
Bram Moolenaar | 265116a | 2011-12-23 12:47:03 +0100 | [diff] [blame] | 117 | #define POUND 0xB1 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 118 | |
| 119 | #define CTRL_F_STR "\056" |
| 120 | #define CTRL_H_STR "\026" |
| 121 | #define CTRL_V_STR "\062" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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 |
Bram Moolenaar | 7fae636 | 2005-06-30 22:06:41 +0000 | [diff] [blame] | 150 | /* CTRL- [ Left Square Bracket == ESC*/ |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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 | |
Bram Moolenaar | 46fd4df | 2015-07-10 14:05:10 +0200 | [diff] [blame] | 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 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 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). |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 178 | * For Acorn we use a dot. |
| 179 | */ |
| 180 | #ifdef BACKSLASH_IN_FILENAME |
| 181 | # define PATHSEP psepc |
| 182 | # define PATHSEPSTR pseps |
| 183 | #else |
Bram Moolenaar | e60acc1 | 2011-05-10 16:41:25 +0200 | [diff] [blame] | 184 | # define PATHSEP '/' |
| 185 | # define PATHSEPSTR "/" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 186 | #endif |