To: vim_dev@googlegroups.com Subject: Patch 8.2.4273 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4273 Problem: The EBCDIC support is outdated. Solution: Remove the EBCDIC support. Files: src/ascii.h, src/charset.c, src/cindent.c, src/digraph.c, src/edit.c, src/eval.c, src/evalfunc.c, src/ex_cmds.c, src/feature.h, src/filepath.c, src/findfile.c, src/getchar.c, src/gui.c, src/gui_motif.c, src/hardcopy.c, src/help.c, src/macros.h, src/map.c, src/mark.c, src/misc2.c, src/normal.c, src/ops.c, src/option.c, src/option.h, src/optiondefs.h, src/os_unix.c, src/proto/evalfunc.pro, src/regexp.c, src/regexp_bt.c, src/regexp_nfa.c, src/register.c, src/screen.c, src/spell.c, src/strings.c, src/structs.h, src/term.c, src/version.c, src/viminfo.c, src/testdir/test_edit.vim, src/testdir/test_exec_while_if.vim, src/testdir/test_expr.vim, src/testdir/test_gf.vim, src/testdir/test_regexp_utf8.vim *** ../vim-8.2.4272/src/ascii.h 2019-11-30 16:54:29.000000000 +0000 --- src/ascii.h 2022-01-31 14:03:51.657359129 +0000 *************** *** 8,21 **** /* * Definitions of various common control characters. - * For EBCDIC we have to use different values. */ - #ifndef EBCDIC - - // IF_EB(ASCII_constant, EBCDIC_constant) - #define IF_EB(a, b) a - #define CharOrd(x) ((x) < 'a' ? (x) - 'A' : (x) - 'a') #define CharOrdLow(x) ((x) - 'a') #define CharOrdUp(x) ((x) - 'A') --- 8,15 ---- *************** *** 77,170 **** #define Ctrl_HAT 30 // ^ #define Ctrl__ 31 - #else - - // EBCDIC - - // IF_EB(ASCII_constant, EBCDIC_constant) - #define IF_EB(a, b) b - - /* - * Finding the position in the alphabet is not straightforward in EBCDIC. - * There are gaps in the code table. - * 'a' + 1 == 'b', but: 'i' + 7 == 'j' and 'r' + 8 == 's' - */ - #define CharOrd__(c) ((c) < ('j' - 'a') ? (c) : ((c) < ('s' - 'a') ? (c) - 7 : (c) - 7 - 8)) - #define CharOrdLow(x) (CharOrd__((x) - 'a')) - #define CharOrdUp(x) (CharOrd__((x) - 'A')) - #define CharOrd(x) (isupper(x) ? CharOrdUp(x) : CharOrdLow(x)) - - #define EBCDIC_CHAR_ADD_(x) ((x) < 0?'a':(x)>25?'z':"abcdefghijklmnopqrstuvwxyz"[x]) - #define EBCDIC_CHAR_ADD(c,s) (isupper(c) ? toupper(EBCDIC_CHAR_ADD_(CharOrdUp(c)+(s))) : EBCDIC_CHAR_ADD_(CharOrdLow(c)+(s))) - - #define R13_(c) ("abcdefghijklmnopqrstuvwxyz"[((c) + 13) % 26]) - #define ROT13(c, a) (isupper(c) ? toupper(R13_(CharOrdUp(c))) : R13_(CharOrdLow(c))) - - #define NUL '\000' - #define BELL '\x2f' - #define BS '\x16' - #define TAB '\x05' - #define NL '\x15' - #define NL_STR (char_u *)"\x15" - #define FF '\x0C' - #define CAR '\x0D' - #define ESC '\x27' - #define ESC_STR (char_u *)"\x27" - #define ESC_STR_nc "\x27" - #define DEL 0x07 - #define DEL_STR (char_u *)"\007" - - #define POUND 0xB1 - - #define CTRL_F_STR "\056" - #define CTRL_H_STR "\026" - #define CTRL_V_STR "\062" - - #define Ctrl_AT 0x00 // @ - #define Ctrl_A 0x01 - #define Ctrl_B 0x02 - #define Ctrl_C 0x03 - #define Ctrl_D 0x37 - #define Ctrl_E 0x2D - #define Ctrl_F 0x2E - #define Ctrl_G 0x2F - #define Ctrl_H 0x16 - #define Ctrl_I 0x05 - #define Ctrl_J 0x15 - #define Ctrl_K 0x0B - #define Ctrl_L 0x0C - #define Ctrl_M 0x0D - #define Ctrl_N 0x0E - #define Ctrl_O 0x0F - #define Ctrl_P 0x10 - #define Ctrl_Q 0x11 - #define Ctrl_R 0x12 - #define Ctrl_S 0x13 - #define Ctrl_T 0x3C - #define Ctrl_U 0x3D - #define Ctrl_V 0x32 - #define Ctrl_W 0x26 - #define Ctrl_X 0x18 - #define Ctrl_Y 0x19 - #define Ctrl_Z 0x3F - // CTRL- [ Left Square Bracket == ESC - #define Ctrl_RSB 0x1D // ] Right Square Bracket - #define Ctrl_BSL 0x1C // \ BackSLash - #define Ctrl_HAT 0x1E // ^ - #define Ctrl__ 0x1F - - #define Ctrl_chr(x) (CtrlTable[(x)]) - extern char CtrlTable[]; - - #define CtrlChar(x) ((x < ' ') ? CtrlCharTable[(x)] : 0) - extern char CtrlCharTable[]; - - #define MetaChar(x) ((x < ' ') ? MetaCharTable[(x)] : 0) - extern char MetaCharTable[]; - - #endif // defined EBCDIC - - // TODO: EBCDIC Code page dependent (here 1047) #define CSI 0x9b // Control Sequence Introducer #define CSI_STR "\233" #define DCS 0x90 // Device Control String --- 71,76 ---- *** ../vim-8.2.4272/src/charset.c 2022-01-08 12:41:12.200795557 +0000 --- src/charset.c 2022-01-31 14:29:22.134397580 +0000 *************** *** 87,104 **** * Set the default size for printable characters: * From to '~' is 1 (printable), others are 2 (not printable). * This also inits all 'isident' and 'isfname' flags to FALSE. - * - * EBCDIC: all chars below ' ' are not printable, all others are - * printable. */ c = 0; while (c < ' ') g_chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2; - #ifdef EBCDIC - while (c < 255) - #else while (c <= '~') - #endif g_chartab[c++] = 1 + CT_PRINT_CHAR; while (c < 256) { --- 87,97 ---- *************** *** 221,230 **** } else if (i == 1) // (re)set printable { ! if ((c < ' ' ! #ifndef EBCDIC ! || c > '~' ! #endif // For double-byte we keep the cell width, so // that we can detect it from the first byte. ) && !(enc_dbcs && MB_BYTE2LEN(c) == 2)) --- 214,220 ---- } else if (i == 1) // (re)set printable { ! if ((c < ' ' || c > '~' // For double-byte we keep the cell width, so // that we can detect it from the first byte. ) && !(enc_dbcs && MB_BYTE2LEN(c) == 2)) *************** *** 519,531 **** c = K_SECOND(c); } ! if ((!chartab_initialized && ( ! #ifdef EBCDIC ! (c >= 64 && c < 255) ! #else ! (c >= ' ' && c <= '~') ! #endif ! )) || (c < 256 && vim_isprintc_strict(c))) { // printable character transchar_charbuf[i] = c; --- 509,516 ---- c = K_SECOND(c); } ! if ((!chartab_initialized && ((c >= ' ' && c <= '~'))) ! || (c < 256 && vim_isprintc_strict(c))) { // printable character transchar_charbuf[i] = c; *************** *** 567,622 **** if (dy_flags & DY_UHEX) // 'display' has "uhex" transchar_hex(charbuf, c); - #ifdef EBCDIC - // For EBCDIC only the characters 0-63 and 255 are not printable - else if (CtrlChar(c) != 0 || c == DEL) - #else else if (c <= 0x7f) // 0x00 - 0x1f and 0x7f - #endif { charbuf[0] = '^'; - #ifdef EBCDIC - if (c == DEL) - charbuf[1] = '?'; // DEL displayed as ^? - else - charbuf[1] = CtrlChar(c); - #else charbuf[1] = c ^ 0x40; // DEL displayed as ^? - #endif - charbuf[2] = NUL; } else if (enc_utf8 && c >= 0x80) { transchar_hex(charbuf, c); } - #ifndef EBCDIC else if (c >= ' ' + 0x80 && c <= '~' + 0x80) // 0xa0 - 0xfe { charbuf[0] = '|'; charbuf[1] = c - 0x80; charbuf[2] = NUL; } - #else - else if (c < 64) - { - charbuf[0] = '~'; - charbuf[1] = MetaChar(c); - charbuf[2] = NUL; - } - #endif else // 0x80 - 0x9f and 0xff { - /* - * TODO: EBCDIC I don't know what to do with this chars, so I display - * them as '~?' for now - */ charbuf[0] = '~'; - #ifdef EBCDIC - charbuf[1] = '?'; // 0xff displayed as ~? - #else charbuf[1] = (c - 0x80) ^ 0x40; // 0xff displayed as ~? - #endif charbuf[2] = NUL; } } --- 552,577 ---- *************** *** 2134,2192 **** backslash_halve(res); return res; } - - #if (defined(EBCDIC) && defined(FEAT_POSTSCRIPT)) || defined(PROTO) - /* - * Table for EBCDIC to ASCII conversion unashamedly taken from xxd.c! - * The first 64 entries have been added to map control characters defined in - * ascii.h - */ - static char_u ebcdic2ascii_tab[256] = - { - 0000, 0001, 0002, 0003, 0004, 0011, 0006, 0177, - 0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017, - 0020, 0021, 0022, 0023, 0024, 0012, 0010, 0027, - 0030, 0031, 0032, 0033, 0033, 0035, 0036, 0037, - 0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047, - 0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057, - 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067, - 0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077, - 0040, 0240, 0241, 0242, 0243, 0244, 0245, 0246, - 0247, 0250, 0325, 0056, 0074, 0050, 0053, 0174, - 0046, 0251, 0252, 0253, 0254, 0255, 0256, 0257, - 0260, 0261, 0041, 0044, 0052, 0051, 0073, 0176, - 0055, 0057, 0262, 0263, 0264, 0265, 0266, 0267, - 0270, 0271, 0313, 0054, 0045, 0137, 0076, 0077, - 0272, 0273, 0274, 0275, 0276, 0277, 0300, 0301, - 0302, 0140, 0072, 0043, 0100, 0047, 0075, 0042, - 0303, 0141, 0142, 0143, 0144, 0145, 0146, 0147, - 0150, 0151, 0304, 0305, 0306, 0307, 0310, 0311, - 0312, 0152, 0153, 0154, 0155, 0156, 0157, 0160, - 0161, 0162, 0136, 0314, 0315, 0316, 0317, 0320, - 0321, 0345, 0163, 0164, 0165, 0166, 0167, 0170, - 0171, 0172, 0322, 0323, 0324, 0133, 0326, 0327, - 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337, - 0340, 0341, 0342, 0343, 0344, 0135, 0346, 0347, - 0173, 0101, 0102, 0103, 0104, 0105, 0106, 0107, - 0110, 0111, 0350, 0351, 0352, 0353, 0354, 0355, - 0175, 0112, 0113, 0114, 0115, 0116, 0117, 0120, - 0121, 0122, 0356, 0357, 0360, 0361, 0362, 0363, - 0134, 0237, 0123, 0124, 0125, 0126, 0127, 0130, - 0131, 0132, 0364, 0365, 0366, 0367, 0370, 0371, - 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067, - 0070, 0071, 0372, 0373, 0374, 0375, 0376, 0377 - }; - - /* - * Convert a buffer worth of characters from EBCDIC to ASCII. Only useful if - * wanting 7-bit ASCII characters out the other end. - */ - void - ebcdic2ascii(char_u *buffer, int len) - { - int i; - - for (i = 0; i < len; i++) - buffer[i] = ebcdic2ascii_tab[buffer[i]]; - } - #endif --- 2089,2091 ---- *** ../vim-8.2.4272/src/cindent.c 2021-12-29 18:09:10.242453334 +0000 --- src/cindent.c 2022-01-31 14:29:38.858145155 +0000 *************** *** 3946,3958 **** try_match_word = FALSE; // does it look like a control character? ! if (*look == '^' ! #ifdef EBCDIC ! && (Ctrl_chr(look[1]) != 0) ! #else ! && look[1] >= '?' && look[1] <= '_' ! #endif ! ) { if (try_match && keytyped == Ctrl_chr(look[1])) return TRUE; --- 3946,3952 ---- try_match_word = FALSE; // does it look like a control character? ! if (*look == '^' && look[1] >= '?' && look[1] <= '_') { if (try_match && keytyped == Ctrl_chr(look[1])) return TRUE; *** ../vim-8.2.4272/src/digraph.c 2022-01-08 16:19:18.501639918 +0000 --- src/digraph.c 2022-01-31 14:30:32.253338960 +0000 *************** *** 138,256 **** }; #else // !HPUX_DIGRAPHS ! ! # ifdef EBCDIC ! ! /* ! * EBCDIC - ISO digraphs ! * TODO: EBCDIC Table is Code-Page 1047 ! */ ! {{'a', '^', 66}, // â ! {'a', '"', 67}, // ä ! {'a', '`', 68}, // à ! {'a', '\'', 69}, // á ! {'a', '~', 70}, // ã ! {'a', '@', 71}, // å ! {'a', 'a', 71}, // å ! {'c', ',', 72}, // ç ! {'n', '~', 73}, // ñ ! {'c', '|', 74}, // ¢ ! {'e', '\'', 81}, // é ! {'e', '^', 82}, // ê ! {'e', '"', 83}, // ë ! {'e', '`', 84}, // è ! {'i', '\'', 85}, // í ! {'i', '^', 86}, // î ! {'i', '"', 87}, // ï ! {'i', '`', 88}, // ì ! {'s', 's', 89}, // ß ! {'A', '^', 98}, //  ! {'A', '"', 99}, // Ä ! {'A', '`', 100}, // À ! {'A', '\'', 101}, // Á ! {'A', '~', 102}, // à ! {'A', '@', 103}, // Å ! {'A', 'A', 103}, // Å ! {'C', ',', 104}, // Ç ! {'N', '~', 105}, // Ñ ! {'|', '|', 106}, // ¦ ! {'o', '/', 112}, // ø ! {'E', '\'', 113}, // É ! {'E', '^', 114}, // Ê ! {'E', '"', 115}, // Ë ! {'E', '`', 116}, // È ! {'I', '\'', 117}, // Í ! {'I', '^', 118}, // Î ! {'I', '"', 119}, // Ï ! {'I', '`', 120}, // Ì ! {'O', '/', 128}, // 0/ XX ! {'<', '<', 138}, // « ! {'>', '>', 139}, // » ! {'d', '-', 140}, // ð ! {'y', '\'', 141}, // ý ! {'i', 'p', 142}, // þ ! {'+', '-', 143}, // ± ! {'~', 'o', 144}, // ° ! {'a', '-', 154}, // ª ! {'o', '-', 155}, // º ! {'a', 'e', 156}, // æ ! {',', ',', 157}, // , XX ! {'A', 'E', 158}, // Æ ! {'o', 'x', 159}, // ¤ - currency symbol in ISO 8859-1 ! {'e', '=', 159}, // ¤ - euro symbol in ISO 8859-15 ! {'E', 'u', 159}, // ¤ - euro symbol in ISO 8859-15 ! {'j', 'u', 160}, // µ ! {'y', '"', 167}, // x XX ! {'~', '!', 170}, // ¡ ! {'~', '?', 171}, // ¿ ! {'D', '-', 172}, // Ð ! {'I', 'p', 174}, // Þ ! {'r', 'O', 175}, // ® ! {'-', ',', 176}, // ¬ ! {'$', '$', 177}, // £ ! {'Y', '-', 178}, // ¥ ! {'~', '.', 179}, // · ! {'c', 'O', 180}, // © ! {'p', 'a', 181}, // § ! {'p', 'p', 182}, // ¶ ! {'1', '4', 183}, // ¼ ! {'1', '2', 184}, // ½ ! {'3', '4', 185}, // ¾ ! {'Y', '\'', 186}, // Ý ! {'"', '"', 187}, // ¨ ! {'-', '=', 188}, // ¯ ! {'\'', '\'', 190}, // ´ ! {'O', 'E', 191}, // × - OE in ISO 8859-15 ! {'/', '\\', 191}, // × - multiplication symbol in ISO 8859-1 ! {'-', '-', 202}, // ­ ! {'o', '^', 203}, // ô ! {'o', '"', 204}, // ö ! {'o', '`', 205}, // ò ! {'o', '\'', 206}, // ó ! {'o', '~', 207}, // õ ! {'1', '1', 218}, // ¹ ! {'u', '^', 219}, // û ! {'u', '"', 220}, // ü ! {'u', '`', 221}, // ù ! {'u', '\'', 222}, // ú ! {':', '-', 225}, // ÷ - division symbol in ISO 8859-1 ! {'o', 'e', 225}, // ÷ - oe in ISO 8859-15 ! {'2', '2', 234}, // ² ! {'O', '^', 235}, // Ô ! {'O', '"', 236}, // Ö ! {'O', '`', 237}, // Ò ! {'O', '\'', 238}, // Ó ! {'O', '~', 239}, // Õ ! {'3', '3', 250}, // ³ ! {'U', '^', 251}, // Û ! {'U', '"', 252}, // Ü ! {'U', '`', 253}, // Ù ! {'U', '\'', 254}, // Ú ! {NUL, NUL, NUL} ! }; ! ! # else // EBCDIC ! # ifdef OLD_DIGRAPHS /* * digraphs compatible with Vim 5.x --- 138,144 ---- }; #else // !HPUX_DIGRAPHS ! # ifdef OLD_DIGRAPHS /* * digraphs compatible with Vim 5.x *************** *** 357,363 **** {'y', '"', 255}, // x XX {NUL, NUL, NUL} }; ! # else // OLD_DIGRAPHS /* * digraphs for Unicode from RFC1345 --- 245,251 ---- {'y', '"', 255}, // x XX {NUL, NUL, NUL} }; ! # else // OLD_DIGRAPHS /* * digraphs for Unicode from RFC1345 *************** *** 1761,1768 **** {NUL, NUL, NUL} }; ! # endif // OLD_DIGRAPHS ! # endif // EBCDIC #endif // !HPUX_DIGRAPHS /* --- 1649,1655 ---- {NUL, NUL, NUL} }; ! # endif // OLD_DIGRAPHS #endif // !HPUX_DIGRAPHS /* *** ../vim-8.2.4272/src/edit.c 2022-01-28 15:28:00.204927781 +0000 --- src/edit.c 2022-01-31 14:31:50.328159591 +0000 *************** *** 2052,2062 **** * stop and defer processing to the "normal" mechanism. * '0' and '^' are special, because they can be followed by CTRL-D. */ ! #ifdef EBCDIC ! # define ISSPECIAL(c) ((c) < ' ' || (c) == '0' || (c) == '^') ! #else ! # define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^') ! #endif /* * "flags": INSCHAR_FORMAT - force formatting --- 2052,2058 ---- * stop and defer processing to the "normal" mechanism. * '0' and '^' are special, because they can be followed by CTRL-D. */ ! #define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^') /* * "flags": INSCHAR_FORMAT - force formatting *************** *** 2926,2934 **** stuffReadbuff(ptr); // a trailing "0" is inserted as "048", "^" as "^" if (last) ! stuffReadbuff((char_u *)(last == '0' ! ? IF_EB("\026\060\064\070", CTRL_V_STR "xf0") ! : IF_EB("\026^", CTRL_V_STR "^"))); } while (--count > 0); --- 2922,2929 ---- stuffReadbuff(ptr); // a trailing "0" is inserted as "048", "^" as "^" if (last) ! stuffReadbuff( ! (char_u *)(last == '0' ? "\026\060\064\070" : "\026^")); } while (--count > 0); *************** *** 3316,3330 **** return ' '; // \"a --> ' ' -- / -- else if (c == 252) return ' '; // \"u --> ' ' -- / -- - #ifdef EBCDIC - else if (islower(c)) - #else // NOTE: islower() does not do the right thing for us on Linux so we // do this the same was as 5.7 and previous, so it works correctly on // all systems. Specifically, the e.g. Delete and Arrow keys are // munged and won't work if e.g. searching for Hebrew text. else if (c >= 'a' && c <= 'z') - #endif return (int)(map[CharOrdLow(c)] + p_aleph); else return c; --- 3311,3321 ---- *************** *** 3346,3357 **** default: { static char str[] = "zqbcxlsjphmkwonu ydafe rig"; - #ifdef EBCDIC - // see note about islower() above - if (!islower(c)) - #else if (c < 'a' || c > 'z') - #endif return c; c = str[CharOrdLow(c)]; break; --- 3337,3343 ---- *************** *** 4224,4230 **** } else want_vcol = tabstop_start(want_vcol, get_sts_value(), ! curbuf->b_p_vsts_array); #else if (p_sta && in_indent) ts = (int)get_sw_value(curbuf); --- 4210,4216 ---- } else want_vcol = tabstop_start(want_vcol, get_sts_value(), ! curbuf->b_p_vsts_array); #else if (p_sta && in_indent) ts = (int)get_sw_value(curbuf); *** ../vim-8.2.4272/src/eval.c 2022-01-29 21:45:30.473921671 +0000 --- src/eval.c 2022-01-31 14:32:21.583687266 +0000 *************** *** 111,123 **** { evalvars_init(); func_init(); - - #ifdef EBCDIC - /* - * Sort the function table, to enable binary search. - */ - sortFunctions(); - #endif } #if defined(EXITFREE) || defined(PROTO) --- 111,116 ---- *** ../vim-8.2.4272/src/evalfunc.c 2022-01-31 12:26:47.851706462 +0000 --- src/evalfunc.c 2022-01-31 14:33:05.111029376 +0000 *************** *** 2467,2499 **** ret_number, f_xor}, }; - #if defined(EBCDIC) || defined(PROTO) - /* - * Compare funcentry_T by function name. - */ - static int - compare_func_name(const void *s1, const void *s2) - { - funcentry_T *p1 = (funcentry_T *)s1; - funcentry_T *p2 = (funcentry_T *)s2; - - return STRCMP(p1->f_name, p2->f_name); - } - - /* - * Sort the function table by function name. - * The sorting of the table above is ASCII dependent. - * On machines using EBCDIC we have to sort it. - */ - void - sortFunctions(void) - { - size_t funcCnt = ARRAY_LENGTH(global_functions); - - qsort(global_functions, funcCnt, sizeof(funcentry_T), compare_func_name); - } - #endif - /* * Function given to ExpandGeneric() to obtain the list of internal * or user defined function names. --- 2467,2472 ---- *************** *** 5101,5113 **** 0 #endif }, ! {"ebcdic", ! #ifdef EBCDIC ! 1 ! #else ! 0 ! #endif ! }, {"fname_case", #ifndef CASE_INSENSITIVE_FILENAME 1 --- 5074,5080 ---- 0 #endif }, ! {"ebcdic", 0 }, {"fname_case", #ifndef CASE_INSENSITIVE_FILENAME 1 *** ../vim-8.2.4272/src/ex_cmds.c 2022-01-29 14:21:48.204942602 +0000 --- src/ex_cmds.c 2022-01-31 14:33:31.622628587 +0000 *************** *** 61,83 **** cval = NL; // NL is stored as CR else cval = c; ! if (vim_isprintc_strict(c) && (c < ' ' ! #ifndef EBCDIC ! || c > '~' ! #endif ! )) { transchar_nonprint(curbuf, buf3, c); vim_snprintf(buf1, sizeof(buf1), " <%s>", (char *)buf3); } else buf1[0] = NUL; - #ifndef EBCDIC if (c >= 0x80) vim_snprintf(buf2, sizeof(buf2), " ", (char *)transchar(c & 0x7f)); else - #endif buf2[0] = NUL; #ifdef FEAT_DIGRAPHS dig = get_digraph_for_char(cval); --- 61,77 ---- cval = NL; // NL is stored as CR else cval = c; ! if (vim_isprintc_strict(c) && (c < ' ' || c > '~')) { transchar_nonprint(curbuf, buf3, c); vim_snprintf(buf1, sizeof(buf1), " <%s>", (char *)buf3); } else buf1[0] = NUL; if (c >= 0x80) vim_snprintf(buf2, sizeof(buf2), " ", (char *)transchar(c & 0x7f)); else buf2[0] = NUL; #ifdef FEAT_DIGRAPHS dig = get_digraph_for_char(cval); *************** *** 1506,1512 **** } else if (term_console) { ! OUT_STR(IF_EB("\033[0 q", ESC_STR "[0 q")); // get window size if (got_int && msg_silent == 0) redraw_later_clear(); // if got_int is TRUE, redraw needed else --- 1500,1506 ---- } else if (term_console) { ! OUT_STR("\033[0 q"); // get window size if (got_int && msg_silent == 0) redraw_later_clear(); // if got_int is TRUE, redraw needed else *** ../vim-8.2.4272/src/feature.h 2022-01-24 11:23:59.855900536 +0000 --- src/feature.h 2022-01-31 14:05:10.348180168 +0000 *************** *** 222,241 **** /* * +rightleft Right-to-left editing/typing support. - * - * Disabled for EBCDIC as it requires multibyte. */ ! #if defined(FEAT_BIG) && !defined(DISABLE_RIGHTLEFT) && !defined(EBCDIC) # define FEAT_RIGHTLEFT #endif /* * +arabic Arabic keymap and shaping support. * Requires FEAT_RIGHTLEFT - * - * Disabled for EBCDIC as it requires multibyte. */ ! #if defined(FEAT_BIG) && !defined(DISABLE_ARABIC) && !defined(EBCDIC) # define FEAT_ARABIC #endif #ifdef FEAT_ARABIC --- 222,237 ---- /* * +rightleft Right-to-left editing/typing support. */ ! #if defined(FEAT_BIG) && !defined(DISABLE_RIGHTLEFT) # define FEAT_RIGHTLEFT #endif /* * +arabic Arabic keymap and shaping support. * Requires FEAT_RIGHTLEFT */ ! #if defined(FEAT_BIG) && !defined(DISABLE_ARABIC) # define FEAT_ARABIC #endif #ifdef FEAT_ARABIC *************** *** 254,269 **** /* * +tag_binary Can use a binary search for the tags file. - * - * Disabled for EBCDIC: - * On z/OS Unix we have the problem that /bin/sort sorts ASCII instead of - * EBCDIC. With this binary search doesn't work, as VIM expects a tag file - * sorted by character values. I'm not sure how to fix this. Should we really - * do a EBCDIC to ASCII conversion for this?? */ ! #if !defined(EBCDIC) ! # define FEAT_TAG_BINS ! #endif /* * +cscope Unix only: Cscope support. --- 250,257 ---- /* * +tag_binary Can use a binary search for the tags file. */ ! #define FEAT_TAG_BINS /* * +cscope Unix only: Cscope support. *************** *** 416,425 **** /* * +spell spell checking - * - * Disabled for EBCDIC: * Doesn't work (SIGSEGV). */ ! #if (defined(FEAT_NORMAL) || defined(PROTO)) && !defined(EBCDIC) # define FEAT_SPELL #endif --- 404,411 ---- /* * +spell spell checking */ ! #if (defined(FEAT_NORMAL) || defined(PROTO)) # define FEAT_SPELL #endif *** ../vim-8.2.4272/src/filepath.c 2022-01-12 15:24:36.641292770 +0000 --- src/filepath.c 2022-01-31 14:33:54.054289437 +0000 *************** *** 2208,2223 **** else if (x == '9') x = 'A'; else ! { ! #ifdef EBCDIC ! if (x == 'I') ! x = 'J'; ! else if (x == 'R') ! x = 'S'; ! else ! #endif ! ++x; ! } } while (x == 'I' || x == 'O'); } --- 2208,2214 ---- else if (x == '9') x = 'A'; else ! ++x; } while (x == 'I' || x == 'O'); } *** ../vim-8.2.4272/src/findfile.c 2022-01-22 20:19:15.747142393 +0000 --- src/findfile.c 2022-01-31 14:34:19.993897209 +0000 *************** *** 489,495 **** * The octet after a '**' is used as a (binary) counter. * So '**3' is transposed to '**^C' ('^C' is ASCII value 3) * or '**76' is transposed to '**N'( 'N' is ASCII value 76). - * For EBCDIC you get different character values. * If no restrict is given after '**' the default is used. * Due to this technique the path looks awful if you print it as a * string. --- 489,494 ---- *** ../vim-8.2.4272/src/getchar.c 2022-01-27 21:56:37.253698701 +0000 --- src/getchar.c 2022-01-31 14:57:51.860486891 +0000 *************** *** 571,581 **** // Put a string of normal characters in the redo buffer (that's // faster). start = s; ! while (*s >= ' ' ! #ifndef EBCDIC ! && *s < DEL // EBCDIC: all chars above space are normal ! #endif ! && (len < 0 || s - str < len)) ++s; // Don't put '0' or '^' as last character, just in case a CTRL-D is --- 571,577 ---- // Put a string of normal characters in the redo buffer (that's // faster). start = s; ! while (*s >= ' ' && *s < DEL && (len < 0 || s - str < len)) ++s; // Don't put '0' or '^' as last character, just in case a CTRL-D is *************** *** 597,609 **** if (c < ' ' || c == DEL || (*s == NUL && (c == '0' || c == '^'))) add_char_buff(&redobuff, Ctrl_V); ! // CTRL-V '0' must be inserted as CTRL-V 048 (EBCDIC: xf0) if (*s == NUL && c == '0') - #ifdef EBCDIC - add_buff(&redobuff, (char_u *)"xf0", 3L); - #else add_buff(&redobuff, (char_u *)"048", 3L); - #endif else add_char_buff(&redobuff, c); } --- 593,601 ---- if (c < ' ' || c == DEL || (*s == NUL && (c == '0' || c == '^'))) add_char_buff(&redobuff, Ctrl_V); ! // CTRL-V '0' must be inserted as CTRL-V 048 if (*s == NUL && c == '0') add_buff(&redobuff, (char_u *)"048", 3L); else add_char_buff(&redobuff, c); } *************** *** 721,731 **** // stuff K_SPECIAL to get the effect of a special key when "literally" // is TRUE. start = arg; ! while ((*arg >= ' ' ! #ifndef EBCDIC ! && *arg < DEL // EBCDIC: chars above space are normal ! #endif ! ) || (*arg == K_SPECIAL && !literally)) ++arg; if (arg > start) --- 713,719 ---- // stuff K_SPECIAL to get the effect of a special key when "literally" // is TRUE. start = arg; ! while ((*arg >= ' ' && *arg < DEL) || (*arg == K_SPECIAL && !literally)) ++arg; if (arg > start) *** ../vim-8.2.4272/src/gui.c 2022-01-27 15:04:19.004952329 +0000 --- src/gui.c 2022-01-31 14:35:48.328561138 +0000 *************** *** 1835,1841 **** void gui_update_cursor_later(void) { ! OUT_STR(IF_EB("\033|s", ESC_STR "|s")); } void --- 1835,1841 ---- void gui_update_cursor_later(void) { ! OUT_STR("\033|s"); } void *************** *** 1962,1973 **** len -= (int)(++p - s); s = p; } ! else if ( ! #ifdef EBCDIC ! CtrlChar(s[0]) != 0 // Ctrl character ! #else ! s[0] < 0x20 // Ctrl character ! #endif #ifdef FEAT_SIGN_ICONS && s[0] != SIGN_BYTE # ifdef FEAT_NETBEANS_INTG --- 1962,1968 ---- len -= (int)(++p - s); s = p; } ! else if (s[0] < 0x20 // Ctrl character #ifdef FEAT_SIGN_ICONS && s[0] != SIGN_BYTE # ifdef FEAT_NETBEANS_INTG *************** *** 2010,2020 **** { p = s; while (len > 0 && ( - #ifdef EBCDIC - CtrlChar(*p) == 0 - #else *p >= 0x20 - #endif #ifdef FEAT_SIGN_ICONS || *p == SIGN_BYTE # ifdef FEAT_NETBEANS_INTG --- 2005,2011 ---- *** ../vim-8.2.4272/src/gui_motif.c 2021-12-27 17:21:38.008449130 +0000 --- src/gui_motif.c 2022-01-31 14:36:01.504361812 +0000 *************** *** 1259,1268 **** XmString label; vimmenu_T *parent = menu->parent; - # ifdef EBCDIC - menu->mnemonic = 0; - # endif - # if (XmVersion <= 1002) // Don't add Popup menu items when the popup menu isn't used. if (menu_is_child_of_popup(menu) && !mouse_model_popup()) --- 1259,1264 ---- *** ../vim-8.2.4272/src/hardcopy.c 2022-01-29 15:19:19.546172430 +0000 --- src/hardcopy.c 2022-01-31 14:36:43.359728542 +0000 *************** *** 1419,1427 **** static void prt_write_file_len(char_u *buffer, int bytes) { - #ifdef EBCDIC - ebcdic2ascii(buffer, bytes); - #endif prt_write_file_raw_len(buffer, bytes); } --- 1419,1424 ---- *************** *** 1626,1633 **** prt_write_string("ul\n"); } // Draw the text - // Note: we write text out raw - EBCDIC conversion is handled in the - // PostScript world via the font encoding vector. if (prt_out_mbyte) prt_write_string("<"); else --- 1623,1628 ---- *************** *** 3119,3125 **** // Write CTRL-D to close serial communication link if used. // NOTHING MUST BE WRITTEN AFTER THIS! ! prt_write_file((char_u *)IF_EB("\004", "\067")); if (!prt_file_error && psettings->outfile == NULL && !got_int && !psettings->user_abort) --- 3114,3120 ---- // Write CTRL-D to close serial communication link if used. // NOTHING MUST BE WRITTEN AFTER THIS! ! prt_write_file((char_u *)"\004"); if (!prt_file_error && psettings->outfile == NULL && !got_int && !psettings->user_abort) *************** *** 3379,3404 **** { // Convert non-printing characters to either their escape or octal // sequence, ensures PS sent over a serial line does not interfere ! // with the comms protocol. Note: For EBCDIC we need to write out ! // the escape sequences as ASCII codes! ! // Note 2: Char codes < 32 are identical in EBCDIC and ASCII AFAIK! ! ga_append(&prt_ps_buffer, IF_EB('\\', 0134)); switch (ch) { ! case BS: ga_append(&prt_ps_buffer, IF_EB('b', 0142)); break; ! case TAB: ga_append(&prt_ps_buffer, IF_EB('t', 0164)); break; ! case NL: ga_append(&prt_ps_buffer, IF_EB('n', 0156)); break; ! case FF: ga_append(&prt_ps_buffer, IF_EB('f', 0146)); break; ! case CAR: ga_append(&prt_ps_buffer, IF_EB('r', 0162)); break; ! case '(': ga_append(&prt_ps_buffer, IF_EB('(', 0050)); break; ! case ')': ga_append(&prt_ps_buffer, IF_EB(')', 0051)); break; ! case '\\': ga_append(&prt_ps_buffer, IF_EB('\\', 0134)); break; default: sprintf((char *)ch_buff, "%03o", (unsigned int)ch); - #ifdef EBCDIC - ebcdic2ascii(ch_buff, 3); - #endif ga_append(&prt_ps_buffer, ch_buff[0]); ga_append(&prt_ps_buffer, ch_buff[1]); ga_append(&prt_ps_buffer, ch_buff[2]); --- 3374,3394 ---- { // Convert non-printing characters to either their escape or octal // sequence, ensures PS sent over a serial line does not interfere ! // with the comms protocol. ! ga_append(&prt_ps_buffer, '\\'); switch (ch) { ! case BS: ga_append(&prt_ps_buffer, 'b'); break; ! case TAB: ga_append(&prt_ps_buffer, 't'); break; ! case NL: ga_append(&prt_ps_buffer, 'n'); break; ! case FF: ga_append(&prt_ps_buffer, 'f'); break; ! case CAR: ga_append(&prt_ps_buffer, 'r'); break; ! case '(': ga_append(&prt_ps_buffer, '('); break; ! case ')': ga_append(&prt_ps_buffer, ')'); break; ! case '\\': ga_append(&prt_ps_buffer, '\\'); break; default: sprintf((char *)ch_buff, "%03o", (unsigned int)ch); ga_append(&prt_ps_buffer, ch_buff[0]); ga_append(&prt_ps_buffer, ch_buff[1]); ga_append(&prt_ps_buffer, ch_buff[2]); *** ../vim-8.2.4272/src/help.c 2022-01-08 16:19:18.505639885 +0000 --- src/help.c 2022-01-31 14:37:04.983401349 +0000 *************** *** 481,491 **** d += 5; if (*s < ' ') { - #ifdef EBCDIC - *d++ = CtrlChar(*s); - #else *d++ = *s + '@'; - #endif if (d[-1] == '\\') *d++ = '\\'; // double a backslash } --- 481,487 ---- *************** *** 651,662 **** // Accept all ASCII chars for keywords, except ' ', '*', '"', '|', and // latin1 word characters (for translated help files). // Only set it when needed, buf_init_chartab() is some work. ! p = ! #ifdef EBCDIC ! (char_u *)"65-255,^*,^|,^\""; ! #else ! (char_u *)"!-~,^*,^|,^\",192-255"; ! #endif if (STRCMP(curbuf->b_p_isk, p) != 0) { set_string_option_direct((char_u *)"isk", -1, p, OPT_FREE|OPT_LOCAL, 0); --- 647,653 ---- // Accept all ASCII chars for keywords, except ' ', '*', '"', '|', and // latin1 word characters (for translated help files). // Only set it when needed, buf_init_chartab() is some work. ! p = (char_u *)"!-~,^*,^|,^\",192-255"; if (STRCMP(curbuf->b_p_isk, p) != 0) { set_string_option_direct((char_u *)"isk", -1, p, OPT_FREE|OPT_LOCAL, 0); *** ../vim-8.2.4272/src/macros.h 2022-01-24 11:23:59.859900461 +0000 --- src/macros.h 2022-01-31 14:05:42.039704628 +0000 *************** *** 77,89 **** #endif // toupper() and tolower() for ASCII only and ignore the current locale. ! #ifdef EBCDIC ! # define TOUPPER_ASC(c) (islower(c) ? toupper(c) : (c)) ! # define TOLOWER_ASC(c) (isupper(c) ? tolower(c) : (c)) ! #else ! # define TOUPPER_ASC(c) (((c) < 'a' || (c) > 'z') ? (c) : (c) - ('a' - 'A')) ! # define TOLOWER_ASC(c) (((c) < 'A' || (c) > 'Z') ? (c) : (c) + ('a' - 'A')) ! #endif /* * MB_ISLOWER() and MB_ISUPPER() are to be used on multi-byte characters. But --- 77,84 ---- #endif // toupper() and tolower() for ASCII only and ignore the current locale. ! #define TOUPPER_ASC(c) (((c) < 'a' || (c) > 'z') ? (c) : (c) - ('a' - 'A')) ! #define TOLOWER_ASC(c) (((c) < 'A' || (c) > 'Z') ? (c) : (c) + ('a' - 'A')) /* * MB_ISLOWER() and MB_ISUPPER() are to be used on multi-byte characters. But *************** *** 102,118 **** // Like isalpha() but reject non-ASCII characters. Can't be used with a // special key (negative value). ! #ifdef EBCDIC ! # define ASCII_ISALPHA(c) isalpha(c) ! # define ASCII_ISALNUM(c) isalnum(c) ! # define ASCII_ISLOWER(c) islower(c) ! # define ASCII_ISUPPER(c) isupper(c) ! #else ! # define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26) ! # define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26) ! # define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c)) ! # define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c)) ! #endif // Returns empty string if it is NULL. #define EMPTY_IF_NULL(x) ((x) ? (x) : (char_u *)"") --- 97,106 ---- // Like isalpha() but reject non-ASCII characters. Can't be used with a // special key (negative value). ! #define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26) ! #define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26) ! #define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c)) ! #define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c)) // Returns empty string if it is NULL. #define EMPTY_IF_NULL(x) ((x) ? (x) : (char_u *)"") *** ../vim-8.2.4272/src/map.c 2022-01-20 11:27:46.282545377 +0000 --- src/map.c 2022-01-31 13:56:06.852242189 +0000 *************** *** 2018,2024 **** { if (what == 2) { ! if (fprintf(fd, IF_EB("\\\026\n", "\\" CTRL_V_STR "\n")) < 0) return FAIL; } else --- 2018,2024 ---- { if (what == 2) { ! if (fprintf(fd, "\\\026\n") < 0) return FAIL; } else *** ../vim-8.2.4272/src/mark.c 2022-01-08 12:41:12.204795554 +0000 --- src/mark.c 2022-01-31 14:37:22.783132003 +0000 *************** *** 310,321 **** // to crash. if (c < 0) return posp; - #ifndef EBCDIC if (c > '~') // check for islower()/isupper() ; ! else ! #endif ! if (c == '\'' || c == '`') // previous context mark { pos_copy = curwin->w_pcmark; // need to make a copy because posp = &pos_copy; // w_pcmark may be changed soon --- 310,318 ---- // to crash. if (c < 0) return posp; if (c > '~') // check for islower()/isupper() ; ! else if (c == '\'' || c == '`') // previous context mark { pos_copy = curwin->w_pcmark; // need to make a copy because posp = &pos_copy; // w_pcmark may be changed soon *** ../vim-8.2.4272/src/misc2.c 2022-01-17 11:22:22.823956310 +0000 --- src/misc2.c 2022-01-31 14:37:47.866752402 +0000 *************** *** 1201,1211 **** } if (table_idx < 0 && !vim_isprintc(c) && c < ' ') { - #ifdef EBCDIC - c = CtrlChar(c); - #else c += '@'; - #endif modifiers |= MOD_MASK_CTRL; } } --- 1201,1207 ---- *************** *** 1560,1575 **** key = TOUPPER_ASC(key); if (simplify && (modifiers & MOD_MASK_CTRL) ! #ifdef EBCDIC ! // TODO: EBCDIC Better use: ! // && (Ctrl_chr(key) || key == '?') ! // ??? ! && strchr("?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", key) ! != NULL ! #else ! && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key)) ! #endif ! ) { key = Ctrl_chr(key); modifiers &= ~MOD_MASK_CTRL; --- 1556,1562 ---- key = TOUPPER_ASC(key); if (simplify && (modifiers & MOD_MASK_CTRL) ! && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key))) { key = Ctrl_chr(key); modifiers &= ~MOD_MASK_CTRL; *** ../vim-8.2.4272/src/normal.c 2022-01-31 12:26:47.843706582 +0000 --- src/normal.c 2022-01-31 13:50:37.776964379 +0000 *************** *** 4426,4438 **** // fwd bwd fwd bwd fwd bwd // identifier "]i" "[i" "]I" "[I" "]^I" "[^I" // define "]d" "[d" "]D" "[D" "]^D" "[^D" ! if (vim_strchr((char_u *) ! # ifdef EBCDIC ! "iI\005dD\067", ! # else ! "iI\011dD\004", ! # endif ! cap->nchar) != NULL) { char_u *ptr; int len; --- 4426,4432 ---- // fwd bwd fwd bwd fwd bwd // identifier "]i" "[i" "]I" "[I" "]^I" "[^I" // define "]d" "[d" "]D" "[D" "]^D" "[^D" ! if (vim_strchr((char_u *)"iI\011dD\004", cap->nchar) != NULL) { char_u *ptr; int len; *************** *** 5925,5936 **** case 'h': case 'H': case Ctrl_H: - # ifdef EBCDIC - // EBCDIC: 'v'-'h' != '^v'-'^h' - if (cap->nchar == Ctrl_H) - cap->cmdchar = Ctrl_V; - else - # endif cap->cmdchar = cap->nchar + ('v' - 'h'); cap->arg = TRUE; nv_visual(cap); --- 5919,5924 ---- *** ../vim-8.2.4272/src/ops.c 2022-01-28 15:28:00.212927659 +0000 --- src/ops.c 2022-01-31 14:37:58.294594577 +0000 *************** *** 2674,2684 **** firstdigit = 'a'; } else - #ifdef EBCDIC - firstdigit = EBCDIC_CHAR_ADD(firstdigit, -Prenum1); - #else firstdigit -= Prenum1; - #endif } else { --- 2674,2680 ---- *************** *** 2690,2700 **** firstdigit = 'z'; } else - #ifdef EBCDIC - firstdigit = EBCDIC_CHAR_ADD(firstdigit, Prenum1); - #else firstdigit += Prenum1; - #endif } curwin->w_cursor.col = col; if (!did_change) --- 2686,2692 ---- *** ../vim-8.2.4272/src/option.c 2022-01-28 20:47:44.103611022 +0000 --- src/option.c 2022-01-31 14:38:41.421941809 +0000 *************** *** 266,272 **** } #endif ! #if defined(FEAT_POSTSCRIPT) && (defined(MSWIN) || defined(VMS) || defined(EBCDIC) || defined(MAC) || defined(hpux)) // Set print encoding on platforms that don't default to latin1 set_string_default("penc", # if defined(MSWIN) --- 266,272 ---- } #endif ! #if defined(FEAT_POSTSCRIPT) && (defined(MSWIN) || defined(VMS) || defined(MAC) || defined(hpux)) // Set print encoding on platforms that don't default to latin1 set_string_default("penc", # if defined(MSWIN) *************** *** 275,288 **** # ifdef VMS (char_u *)"dec-mcs" # else ! # ifdef EBCDIC ! (char_u *)"ebcdic-uk" ! # else ! # ifdef MAC (char_u *)"mac-roman" ! # else // HPUX (char_u *)"hp-roman8" - # endif # endif # endif # endif --- 275,284 ---- # ifdef VMS (char_u *)"dec-mcs" # else ! # ifdef MAC (char_u *)"mac-roman" ! # else // HPUX (char_u *)"hp-roman8" # endif # endif # endif *************** *** 3920,3930 **** /* * Check for name starting with an illegal character. */ - #ifdef EBCDIC - if (!islower(arg[0])) - #else if (arg[0] < 'a' || arg[0] > 'z') - #endif return -1; is_term_opt = (arg[0] == 't' && arg[1] == '_'); --- 3916,3922 ---- *** ../vim-8.2.4272/src/option.h 2022-01-15 10:52:08.264884078 +0000 --- src/option.h 2022-01-31 14:06:07.863316825 +0000 *************** *** 89,99 **** # ifdef VMS # define DFLT_EFM "%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f,%f|%l| %m" # else // Unix, probably - # ifdef EBCDIC - #define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m" - # else #define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%D%*\\a: Entering directory %*[`']%f',%X%*\\a: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m" - # endif # endif # endif # endif --- 89,95 ---- *** ../vim-8.2.4272/src/optiondefs.h 2022-01-15 10:52:08.264884078 +0000 --- src/optiondefs.h 2022-01-31 14:07:07.922413961 +0000 *************** *** 1437,1447 **** # ifdef VMS (char_u *)"@,48-57,/,.,-,_,+,,,#,$,%,<,>,[,],:,;,~", # else // UNIX et al. - # ifdef EBCDIC - (char_u *)"@,240-249,/,.,-,_,+,,,#,$,%,~,=", - # else (char_u *)"@,48-57,/,.,-,_,+,,,#,$,%,~,=", - # endif # endif # endif #endif --- 1437,1443 ---- *************** *** 1452,1485 **** #if defined(MSWIN) (char_u *)"@,48-57,_,128-167,224-235", #else - # ifdef EBCDIC - // TODO: EBCDIC Check this! @ == isalpha() - (char_u *)"@,240-249,_,66-73,81-89,98-105," - "112-120,128,140-142,156,158,172," - "174,186,191,203-207,219-225,235-239," - "251-254", - # else (char_u *)"@,48-57,_,192-255", - # endif #endif (char_u *)0L} SCTX_INIT}, {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP, (char_u *)&p_isk, PV_ISK, { - #ifdef EBCDIC - (char_u *)"@,240-249,_", - // TODO: EBCDIC Check this! @ == isalpha() - (char_u *)"@,240-249,_,66-73,81-89,98-105," - "112-120,128,140-142,156,158,172," - "174,186,191,203-207,219-225,235-239," - "251-254", - #else (char_u *)"@,48-57,_", ! # if defined(MSWIN) (char_u *)"@,48-57,_,128-167,224-235" ! # else ISK_LATIN1 - # endif #endif } SCTX_INIT}, {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, --- 1448,1464 ---- #if defined(MSWIN) (char_u *)"@,48-57,_,128-167,224-235", #else (char_u *)"@,48-57,_,192-255", #endif (char_u *)0L} SCTX_INIT}, {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP, (char_u *)&p_isk, PV_ISK, { (char_u *)"@,48-57,_", ! #if defined(MSWIN) (char_u *)"@,48-57,_,128-167,224-235" ! #else ISK_LATIN1 #endif } SCTX_INIT}, {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, *************** *** 1488,1499 **** #if defined(MSWIN) || defined(VMS) (char_u *)"@,~-255", #else - # ifdef EBCDIC - // all chars above 63 are printable - (char_u *)"63-255", - # else ISP_LATIN1, - # endif #endif (char_u *)0L} SCTX_INIT}, {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM, --- 1467,1473 ---- *** ../vim-8.2.4272/src/os_unix.c 2022-01-28 15:28:00.212927659 +0000 --- src/os_unix.c 2022-01-31 14:38:58.777679100 +0000 *************** *** 3773,3782 **** #ifdef FEAT_MOUSE_URXVT if (ttym_flags == TTYM_URXVT) { ! out_str_nf((char_u *) ! (on ! ? IF_EB("\033[?1015h", ESC_STR "[?1015h") ! : IF_EB("\033[?1015l", ESC_STR "[?1015l"))); mouse_ison = on; } #endif --- 3773,3779 ---- #ifdef FEAT_MOUSE_URXVT if (ttym_flags == TTYM_URXVT) { ! out_str_nf((char_u *)(on ? "\033[?1015h" : "\033[?1015l")); mouse_ison = on; } #endif *************** *** 3784,3793 **** if (ttym_flags == TTYM_SGR) { // SGR mode supports columns above 223 ! out_str_nf((char_u *) ! (on ! ? IF_EB("\033[?1006h", ESC_STR "[?1006h") ! : IF_EB("\033[?1006l", ESC_STR "[?1006l"))); mouse_ison = on; } --- 3781,3787 ---- if (ttym_flags == TTYM_SGR) { // SGR mode supports columns above 223 ! out_str_nf((char_u *)(on ? "\033[?1006h" : "\033[?1006l")); mouse_ison = on; } *************** *** 3797,3804 **** bevalterm_ison = (p_bevalterm && on); if (xterm_mouse_vers > 1 && !bevalterm_ison) // disable mouse movement events, enabling is below ! out_str_nf((char_u *) ! (IF_EB("\033[?1003l", ESC_STR "[?1003l"))); } #endif --- 3791,3797 ---- bevalterm_ison = (p_bevalterm && on); if (xterm_mouse_vers > 1 && !bevalterm_ison) // disable mouse movement events, enabling is below ! out_str_nf((char_u *)("\033[?1003l")); } #endif *************** *** 3809,3824 **** (xterm_mouse_vers > 1 ? ( #ifdef FEAT_BEVAL_TERM ! bevalterm_ison ! ? IF_EB("\033[?1003h", ESC_STR "[?1003h") : #endif ! IF_EB("\033[?1002h", ESC_STR "[?1002h")) ! : IF_EB("\033[?1000h", ESC_STR "[?1000h"))); else // disable mouse events, could probably always send the same out_str_nf((char_u *) ! (xterm_mouse_vers > 1 ! ? IF_EB("\033[?1002l", ESC_STR "[?1002l") ! : IF_EB("\033[?1000l", ESC_STR "[?1000l"))); mouse_ison = on; } --- 3802,3814 ---- (xterm_mouse_vers > 1 ? ( #ifdef FEAT_BEVAL_TERM ! bevalterm_ison ? "\033[?1003h" : #endif ! "\033[?1002h") ! : "\033[?1000h")); else // disable mouse events, could probably always send the same out_str_nf((char_u *) ! (xterm_mouse_vers > 1 ? "\033[?1002l" : "\033[?1000l")); mouse_ison = on; } *************** *** 3886,3903 **** // 5 = Windows UP Arrow # ifdef JSBTERM_MOUSE_NONADVANCED // Disables full feedback of pointer movements ! out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK1Q\033\\", ! ESC_STR "[0~ZwLMRK1Q" ESC_STR "\\")); # else ! out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\", ! ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\")); # endif mouse_ison = TRUE; } else { ! out_str_nf((char_u *)IF_EB("\033[0~ZwQ\033\\", ! ESC_STR "[0~ZwQ" ESC_STR "\\")); mouse_ison = FALSE; } } --- 3876,3890 ---- // 5 = Windows UP Arrow # ifdef JSBTERM_MOUSE_NONADVANCED // Disables full feedback of pointer movements ! out_str_nf((char_u *)"\033[0~ZwLMRK1Q\033\\"); # else ! out_str_nf((char_u *)"\033[0~ZwLMRK+1Q\033\\"); # endif mouse_ison = TRUE; } else { ! out_str_nf((char_u *)"\033[0~ZwQ\033\\"); mouse_ison = FALSE; } } *************** *** 3943,3950 **** ) { set_mouse_termcode(KS_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? IF_EB("\233M", CSI_STR "M") ! : IF_EB("\033[M", ESC_STR "[M"))); if (*p_mouse != NUL) { // force mouse off and maybe on to send possibly new mouse --- 3930,3936 ---- ) { set_mouse_termcode(KS_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? "\233M" : "\033[M")); if (*p_mouse != NUL) { // force mouse off and maybe on to send possibly new mouse *************** *** 3963,3970 **** && !gui.in_use # endif ) ! set_mouse_termcode(KS_GPM_MOUSE, ! (char_u *)IF_EB("\033MG", ESC_STR "MG")); else del_mouse_termcode(KS_GPM_MOUSE); # endif --- 3949,3955 ---- && !gui.in_use # endif ) ! set_mouse_termcode(KS_GPM_MOUSE, (char_u *)"\033MG"); else del_mouse_termcode(KS_GPM_MOUSE); # endif *************** *** 3975,3981 **** && !gui.in_use # endif ) ! set_mouse_termcode(KS_MOUSE, (char_u *)IF_EB("\033MS", ESC_STR "MS")); # endif # ifdef FEAT_MOUSE_JSB --- 3960,3966 ---- && !gui.in_use # endif ) ! set_mouse_termcode(KS_MOUSE, (char_u *)"\033MS"); # endif # ifdef FEAT_MOUSE_JSB *************** *** 3985,3992 **** && !gui.in_use # endif ) ! set_mouse_termcode(KS_JSBTERM_MOUSE, ! (char_u *)IF_EB("\033[0~zw", ESC_STR "[0~zw")); else del_mouse_termcode(KS_JSBTERM_MOUSE); # endif --- 3970,3976 ---- && !gui.in_use # endif ) ! set_mouse_termcode(KS_JSBTERM_MOUSE, (char_u *)"\033[0~zw"); else del_mouse_termcode(KS_JSBTERM_MOUSE); # endif *************** *** 3999,4006 **** && !gui.in_use # endif ) ! set_mouse_termcode(KS_NETTERM_MOUSE, ! (char_u *)IF_EB("\033}", ESC_STR "}")); else del_mouse_termcode(KS_NETTERM_MOUSE); # endif --- 3983,3989 ---- && !gui.in_use # endif ) ! set_mouse_termcode(KS_NETTERM_MOUSE, (char_u *)"\033}"); else del_mouse_termcode(KS_NETTERM_MOUSE); # endif *************** *** 4013,4019 **** # endif ) set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "["))); else del_mouse_termcode(KS_DEC_MOUSE); # endif --- 3996,4002 ---- # endif ) set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? "\233" : "\033[")); else del_mouse_termcode(KS_DEC_MOUSE); # endif *************** *** 4024,4031 **** && !gui.in_use # endif ) ! set_mouse_termcode(KS_PTERM_MOUSE, ! (char_u *) IF_EB("\033[", ESC_STR "[")); else del_mouse_termcode(KS_PTERM_MOUSE); # endif --- 4007,4013 ---- && !gui.in_use # endif ) ! set_mouse_termcode(KS_PTERM_MOUSE, (char_u *)"\033["); else del_mouse_termcode(KS_PTERM_MOUSE); # endif *************** *** 4037,4044 **** ) { set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? IF_EB("\233*M", CSI_STR "*M") ! : IF_EB("\033[*M", ESC_STR "[*M"))); if (*p_mouse != NUL) { --- 4019,4025 ---- ) { set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? "\233*M" : "\033[*M")); if (*p_mouse != NUL) { *************** *** 4056,4067 **** ) { set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? IF_EB("\233<*M", CSI_STR "<*M") ! : IF_EB("\033[<*M", ESC_STR "[<*M"))); set_mouse_termcode(KS_SGR_MOUSE_RELEASE, (char_u *)(term_is_8bit(T_NAME) ! ? IF_EB("\233<*m", CSI_STR "<*m") ! : IF_EB("\033[<*m", ESC_STR "[<*m"))); if (*p_mouse != NUL) { --- 4037,4046 ---- ) { set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME) ! ? "\233<*M" : "\033[<*M")); set_mouse_termcode(KS_SGR_MOUSE_RELEASE, (char_u *)(term_is_8bit(T_NAME) ! ? "\233<*m" : "\033[<*m")); if (*p_mouse != NUL) { *************** *** 6104,6110 **** { WantQueryMouse = FALSE; if (!no_query_mouse_for_testing) ! mch_write((char_u *)IF_EB("\033[1'|", ESC_STR "[1'|"), 5); } #endif --- 6083,6089 ---- { WantQueryMouse = FALSE; if (!no_query_mouse_for_testing) ! mch_write((char_u *)"\033[1'|", 5); } #endif *************** *** 8207,8320 **** } } #endif // USE_XSMP - - - #ifdef EBCDIC - // Translate character to its CTRL- value - char CtrlTable[] = - { - /* 00 - 5E */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* ^ */ 0x1E, - /* - */ 0x1F, - /* 61 - 6C */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* _ */ 0x1F, - /* 6E - 80 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* a */ 0x01, - /* b */ 0x02, - /* c */ 0x03, - /* d */ 0x37, - /* e */ 0x2D, - /* f */ 0x2E, - /* g */ 0x2F, - /* h */ 0x16, - /* i */ 0x05, - /* 8A - 90 */ - 0, 0, 0, 0, 0, 0, 0, - /* j */ 0x15, - /* k */ 0x0B, - /* l */ 0x0C, - /* m */ 0x0D, - /* n */ 0x0E, - /* o */ 0x0F, - /* p */ 0x10, - /* q */ 0x11, - /* r */ 0x12, - /* 9A - A1 */ - 0, 0, 0, 0, 0, 0, 0, 0, - /* s */ 0x13, - /* t */ 0x3C, - /* u */ 0x3D, - /* v */ 0x32, - /* w */ 0x26, - /* x */ 0x18, - /* y */ 0x19, - /* z */ 0x3F, - /* AA - AC */ - 0, 0, 0, - /* [ */ 0x27, - /* AE - BC */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* ] */ 0x1D, - /* BE - C0 */ 0, 0, 0, - /* A */ 0x01, - /* B */ 0x02, - /* C */ 0x03, - /* D */ 0x37, - /* E */ 0x2D, - /* F */ 0x2E, - /* G */ 0x2F, - /* H */ 0x16, - /* I */ 0x05, - /* CA - D0 */ 0, 0, 0, 0, 0, 0, 0, - /* J */ 0x15, - /* K */ 0x0B, - /* L */ 0x0C, - /* M */ 0x0D, - /* N */ 0x0E, - /* O */ 0x0F, - /* P */ 0x10, - /* Q */ 0x11, - /* R */ 0x12, - /* DA - DF */ 0, 0, 0, 0, 0, 0, - /* \ */ 0x1C, - /* E1 */ 0, - /* S */ 0x13, - /* T */ 0x3C, - /* U */ 0x3D, - /* V */ 0x32, - /* W */ 0x26, - /* X */ 0x18, - /* Y */ 0x19, - /* Z */ 0x3F, - /* EA - FF*/ 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - char MetaCharTable[]= - {// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 0, 0, 0, 0,'\\', 0,'F', 0,'W','M','N', 0, 0, 0, 0, 0, - 0, 0, 0, 0,']', 0, 0,'G', 0, 0,'R','O', 0, 0, 0, 0, - '@','A','B','C','D','E', 0, 0,'H','I','J','K','L', 0, 0, 0, - 'P','Q', 0,'S','T','U','V', 0,'X','Y','Z','[', 0, 0,'^', 0 - }; - - - // TODO: Use characters NOT numbers!!! - char CtrlCharTable[]= - {// 0 1 2 3 4 5 6 7 8 9 A B C D E F - 124,193,194,195, 0,201, 0, 0, 0, 0, 0,210,211,212,213,214, - 215,216,217,226, 0,209,200, 0,231,232, 0, 0,224,189, 95,109, - 0, 0, 0, 0, 0, 0,230,173, 0, 0, 0, 0, 0,197,198,199, - 0, 0,229, 0, 0, 0, 0,196, 0, 0, 0, 0,227,228, 0,233, - }; - - - #endif --- 8186,8188 ---- *** ../vim-8.2.4272/src/proto/evalfunc.pro 2022-01-04 15:16:57.879864882 +0000 --- src/proto/evalfunc.pro 2022-01-31 14:33:09.166968065 +0000 *************** *** 1,5 **** /* evalfunc.c */ - void sortFunctions(void); char_u *get_function_name(expand_T *xp, int idx); char_u *get_expr_name(expand_T *xp, int idx); int find_internal_func(char_u *name); --- 1,4 ---- *** ../vim-8.2.4272/src/regexp.c 2022-01-30 17:17:38.437273118 +0000 --- src/regexp.c 2022-01-31 14:39:49.672908619 +0000 *************** *** 231,251 **** class_tab[i] = RI_DIGIT + RI_HEX + RI_WORD; else if (i >= 'a' && i <= 'f') class_tab[i] = RI_HEX + RI_WORD + RI_HEAD + RI_ALPHA + RI_LOWER; - #ifdef EBCDIC - else if ((i >= 'g' && i <= 'i') || (i >= 'j' && i <= 'r') - || (i >= 's' && i <= 'z')) - #else else if (i >= 'g' && i <= 'z') - #endif class_tab[i] = RI_WORD + RI_HEAD + RI_ALPHA + RI_LOWER; else if (i >= 'A' && i <= 'F') class_tab[i] = RI_HEX + RI_WORD + RI_HEAD + RI_ALPHA + RI_UPPER; - #ifdef EBCDIC - else if ((i >= 'G' && i <= 'I') || ( i >= 'J' && i <= 'R') - || (i >= 'S' && i <= 'Z')) - #else else if (i >= 'G' && i <= 'Z') - #endif class_tab[i] = RI_WORD + RI_HEAD + RI_ALPHA + RI_UPPER; else if (i == '_') class_tab[i] = RI_WORD + RI_HEAD; --- 231,241 ---- *************** *** 300,308 **** * META contains all characters that may be magic, except '^' and '$'. */ - #ifdef EBCDIC - static char_u META[] = "%&()*+.123456789<=>?@ACDFHIKLMOPSUVWX[_acdfhiklmnopsuvwxz{|~"; - #else // META[] is used often enough to justify turning it into a table. static char_u META_flags[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, --- 290,295 ---- *************** *** 320,326 **** // p s u v w x z { | ~ 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1 }; - #endif static int curchr; // currently parsed character // Previous character. Note: prevchr is sometimes -1 when we are not at the --- 307,312 ---- *************** *** 409,438 **** return 0; } - #ifdef EBCDIC - /* - * Table for equivalence class "c". (IBM-1047) - */ - static char *EQUIVAL_CLASS_C[16] = { - "A\x62\x63\x64\x65\x66\x67", - "C\x68", - "E\x71\x72\x73\x74", - "I\x75\x76\x77\x78", - "N\x69", - "O\xEB\xEC\xED\xEE\xEF\x80", - "U\xFB\xFC\xFD\xFE", - "Y\xBA", - "a\x42\x43\x44\x45\x46\x47", - "c\x48", - "e\x51\x52\x53\x54", - "i\x55\x56\x57\x58", - "n\x49", - "o\xCB\xCC\xCD\xCE\xCF\x70", - "u\xDB\xDC\xDD\xDE", - "y\x8D\xDF", - }; - #endif - /* * Check for a collating element "[.a.]". "pp" points to the '['. * Returns a character. Zero means that no item was recognized. Otherwise --- 395,400 ---- *************** *** 788,800 **** if (c == NUL) curchr = '\\'; // trailing '\' ! else if ( ! #ifdef EBCDIC ! vim_strchr(META, c) ! #else ! c <= '~' && META_flags[c] ! #endif ! ) { /* * META contains everything that may be magic sometimes, --- 750,756 ---- if (c == NUL) curchr = '\\'; // trailing '\' ! else if (c <= '~' && META_flags[c]) { /* * META contains everything that may be magic sometimes, *** ../vim-8.2.4272/src/regexp_bt.c 2022-01-08 21:38:48.203970853 +0000 --- src/regexp_bt.c 2022-01-31 14:40:15.860512149 +0000 *************** *** 533,554 **** if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 || STRCMP(p_enc, "iso-8859-15") == 0) { - #ifdef EBCDIC - int i; - - // This might be slower than switch/case below. - for (i = 0; i < 16; i++) - { - if (vim_strchr(EQUIVAL_CLASS_C[i], c) != NULL) - { - char *p = EQUIVAL_CLASS_C[i]; - - while (*p != 0) - regmbc(*p++); - return; - } - } - #else switch (c) { // Do not use '\300' style, it results in a negative number. --- 533,538 ---- *************** *** 1012,1018 **** regmbc(0x1e95); regmbc(0x2c6c); return; } - #endif } regmbc(c); } --- 996,1001 ---- *************** *** 1794,1812 **** } else { - #ifdef EBCDIC - int alpha_only = FALSE; - - // for alphabetical range skip the gaps - // 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. - if (isalpha(startc) && isalpha(endc)) - alpha_only = TRUE; - #endif while (++startc <= endc) ! #ifdef EBCDIC ! if (!alpha_only || isalpha(startc)) ! #endif ! regc(startc); } startc = -1; } --- 1777,1784 ---- } else { while (++startc <= endc) ! regc(startc); } startc = -1; } *** ../vim-8.2.4272/src/regexp_nfa.c 2022-01-07 16:55:27.112417600 +0000 --- src/regexp_nfa.c 2022-01-31 14:41:12.063661113 +0000 *************** *** 698,816 **** if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 || STRCMP(p_enc, "iso-8859-15") == 0) { ! #ifdef EBCDIC ! # define A_circumflex 0x62 ! # define A_diaeresis 0x63 ! # define A_grave 0x64 ! # define A_acute 0x65 ! # define A_virguilla 0x66 ! # define A_ring 0x67 ! # define C_cedilla 0x68 ! # define E_acute 0x71 ! # define E_circumflex 0x72 ! # define E_diaeresis 0x73 ! # define E_grave 0x74 ! # define I_acute 0x75 ! # define I_circumflex 0x76 ! # define I_diaeresis 0x77 ! # define I_grave 0x78 ! # define N_virguilla 0x69 ! # define O_circumflex 0xeb ! # define O_diaeresis 0xec ! # define O_grave 0xed ! # define O_acute 0xee ! # define O_virguilla 0xef ! # define O_slash 0x80 ! # define U_circumflex 0xfb ! # define U_diaeresis 0xfc ! # define U_grave 0xfd ! # define U_acute 0xfe ! # define Y_acute 0xba ! # define a_grave 0x42 ! # define a_acute 0x43 ! # define a_circumflex 0x44 ! # define a_virguilla 0x45 ! # define a_diaeresis 0x46 ! # define a_ring 0x47 ! # define c_cedilla 0x48 ! # define e_grave 0x51 ! # define e_acute 0x52 ! # define e_circumflex 0x53 ! # define e_diaeresis 0x54 ! # define i_grave 0x55 ! # define i_acute 0x56 ! # define i_circumflex 0x57 ! # define i_diaeresis 0x58 ! # define n_virguilla 0x49 ! # define o_grave 0xcb ! # define o_acute 0xcc ! # define o_circumflex 0xcd ! # define o_virguilla 0xce ! # define o_diaeresis 0xcf ! # define o_slash 0x70 ! # define u_grave 0xdb ! # define u_acute 0xdc ! # define u_circumflex 0xdd ! # define u_diaeresis 0xde ! # define y_acute 0x8d ! # define y_diaeresis 0xdf ! #else ! # define A_grave 0xc0 ! # define A_acute 0xc1 ! # define A_circumflex 0xc2 ! # define A_virguilla 0xc3 ! # define A_diaeresis 0xc4 ! # define A_ring 0xc5 ! # define C_cedilla 0xc7 ! # define E_grave 0xc8 ! # define E_acute 0xc9 ! # define E_circumflex 0xca ! # define E_diaeresis 0xcb ! # define I_grave 0xcc ! # define I_acute 0xcd ! # define I_circumflex 0xce ! # define I_diaeresis 0xcf ! # define N_virguilla 0xd1 ! # define O_grave 0xd2 ! # define O_acute 0xd3 ! # define O_circumflex 0xd4 ! # define O_virguilla 0xd5 ! # define O_diaeresis 0xd6 ! # define O_slash 0xd8 ! # define U_grave 0xd9 ! # define U_acute 0xda ! # define U_circumflex 0xdb ! # define U_diaeresis 0xdc ! # define Y_acute 0xdd ! # define a_grave 0xe0 ! # define a_acute 0xe1 ! # define a_circumflex 0xe2 ! # define a_virguilla 0xe3 ! # define a_diaeresis 0xe4 ! # define a_ring 0xe5 ! # define c_cedilla 0xe7 ! # define e_grave 0xe8 ! # define e_acute 0xe9 ! # define e_circumflex 0xea ! # define e_diaeresis 0xeb ! # define i_grave 0xec ! # define i_acute 0xed ! # define i_circumflex 0xee ! # define i_diaeresis 0xef ! # define n_virguilla 0xf1 ! # define o_grave 0xf2 ! # define o_acute 0xf3 ! # define o_circumflex 0xf4 ! # define o_virguilla 0xf5 ! # define o_diaeresis 0xf6 ! # define o_slash 0xf8 ! # define u_grave 0xf9 ! # define u_acute 0xfa ! # define u_circumflex 0xfb ! # define u_diaeresis 0xfc ! # define y_acute 0xfd ! # define y_diaeresis 0xff ! #endif switch (c) { case 'A': case A_grave: case A_acute: case A_circumflex: --- 698,758 ---- if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 || STRCMP(p_enc, "iso-8859-15") == 0) { ! #define A_grave 0xc0 ! #define A_acute 0xc1 ! #define A_circumflex 0xc2 ! #define A_virguilla 0xc3 ! #define A_diaeresis 0xc4 ! #define A_ring 0xc5 ! #define C_cedilla 0xc7 ! #define E_grave 0xc8 ! #define E_acute 0xc9 ! #define E_circumflex 0xca ! #define E_diaeresis 0xcb ! #define I_grave 0xcc ! #define I_acute 0xcd ! #define I_circumflex 0xce ! #define I_diaeresis 0xcf ! #define N_virguilla 0xd1 ! #define O_grave 0xd2 ! #define O_acute 0xd3 ! #define O_circumflex 0xd4 ! #define O_virguilla 0xd5 ! #define O_diaeresis 0xd6 ! #define O_slash 0xd8 ! #define U_grave 0xd9 ! #define U_acute 0xda ! #define U_circumflex 0xdb ! #define U_diaeresis 0xdc ! #define Y_acute 0xdd ! #define a_grave 0xe0 ! #define a_acute 0xe1 ! #define a_circumflex 0xe2 ! #define a_virguilla 0xe3 ! #define a_diaeresis 0xe4 ! #define a_ring 0xe5 ! #define c_cedilla 0xe7 ! #define e_grave 0xe8 ! #define e_acute 0xe9 ! #define e_circumflex 0xea ! #define e_diaeresis 0xeb ! #define i_grave 0xec ! #define i_acute 0xed ! #define i_circumflex 0xee ! #define i_diaeresis 0xef ! #define n_virguilla 0xf1 ! #define o_grave 0xf2 ! #define o_acute 0xf3 ! #define o_circumflex 0xf4 ! #define o_virguilla 0xf5 ! #define o_diaeresis 0xf6 ! #define o_slash 0xf8 ! #define u_grave 0xf9 ! #define u_acute 0xfa ! #define u_circumflex 0xfb ! #define u_diaeresis 0xfc ! #define y_acute 0xfd ! #define y_diaeresis 0xff switch (c) { case 'A': case A_grave: case A_acute: case A_circumflex: *************** *** 2041,2064 **** } else { - #ifdef EBCDIC - int alpha_only = FALSE; - - // for alphabetical range skip the gaps - // 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. - if (isalpha(startc) && isalpha(endc)) - alpha_only = TRUE; - #endif // Emit the range. "startc" was already emitted, so // skip it. for (c = startc + 1; c <= endc; c++) ! #ifdef EBCDIC ! if (!alpha_only || isalpha(startc)) ! #endif ! { ! EMIT(c); ! EMIT(NFA_CONCAT); ! } } emit_range = FALSE; startc = -1; --- 1983,1995 ---- } else { // Emit the range. "startc" was already emitted, so // skip it. for (c = startc + 1; c <= endc; c++) ! { ! EMIT(c); ! EMIT(NFA_CONCAT); ! } } emit_range = FALSE; startc = -1; *** ../vim-8.2.4272/src/register.c 2022-01-28 16:01:09.552028335 +0000 --- src/register.c 2022-01-31 14:41:31.951360011 +0000 *************** *** 2297,2317 **** return '+'; #endif else - { - #ifdef EBCDIC - int i; - - // EBCDIC is really braindead ... - i = 'a' + (num - 10); - if (i > 'i') - i += 7; - if (i > 'r') - i += 8; - return i; - #else return num + 'a' - 10; - #endif - } } #if defined(FEAT_EVAL) || defined(PROTO) --- 2297,2303 ---- *** ../vim-8.2.4272/src/screen.c 2021-12-31 22:48:56.587368898 +0000 --- src/screen.c 2022-01-31 13:58:26.318195610 +0000 *************** *** 1796,1802 **** char buf[20]; // The GUI handles this internally. ! sprintf(buf, IF_EB("\033|%dh", ESC_STR "|%dh"), attr); OUT_STR(buf); } else --- 1796,1802 ---- char buf[20]; // The GUI handles this internally. ! sprintf(buf, "\033|%dh", attr); OUT_STR(buf); } else *************** *** 1946,1952 **** char buf[20]; // use internal GUI code ! sprintf(buf, IF_EB("\033|%dH", ESC_STR "|%dH"), screen_attr); OUT_STR(buf); } else --- 1946,1952 ---- char buf[20]; // use internal GUI code ! sprintf(buf, "\033|%dH", screen_attr); OUT_STR(buf); } else *** ../vim-8.2.4272/src/spell.c 2022-01-05 16:08:59.524426437 +0000 --- src/spell.c 2022-01-31 14:41:43.355187312 +0000 *************** *** 2534,2540 **** /* * Init the chartab used for spelling for ASCII. - * EBCDIC is not supported! */ void clear_spell_chartab(spelltab_T *sp) --- 2534,2539 ---- *** ../vim-8.2.4272/src/strings.c 2022-01-08 16:19:18.509639849 +0000 --- src/strings.c 2022-01-31 14:41:55.802998827 +0000 *************** *** 342,352 **** { p2 = p; while ((c = *p2) != NUL) - #ifdef EBCDIC - *p2++ = isalpha(c) ? toupper(c) : c; - #else *p2++ = (c < 'a' || c > 'z') ? c : (c - 0x20); - #endif } } --- 342,348 ---- *** ../vim-8.2.4272/src/structs.h 2022-01-26 21:01:11.188928567 +0000 --- src/structs.h 2022-01-31 14:07:55.749694129 +0000 *************** *** 136,144 **** * (a normal mark is a lnum/col pair, the same as a file position) */ - // (Note: for EBCDIC there are more than 26, because there are gaps in the - // alphabet coding. To minimize changes to the code, I decided to just - // increase the number of possible marks. #define NMARKS ('z' - 'a' + 1) // max. # of named marks #define EXTRA_MARKS 10 // marks 0-9 #define JUMPLISTSIZE 100 // max. # of marks in jump list --- 136,141 ---- *** ../vim-8.2.4272/src/term.c 2022-01-08 12:41:12.208795550 +0000 --- src/term.c 2022-01-31 14:03:28.041712367 +0000 *************** *** 222,269 **** * GUI pseudo term-cap. */ {(int)KS_NAME, "gui"}, ! {(int)KS_CE, IF_EB("\033|$", ESC_STR "|$")}, ! {(int)KS_AL, IF_EB("\033|i", ESC_STR "|i")}, # ifdef TERMINFO ! {(int)KS_CAL, IF_EB("\033|%p1%dI", ESC_STR "|%p1%dI")}, # else ! {(int)KS_CAL, IF_EB("\033|%dI", ESC_STR "|%dI")}, # endif ! {(int)KS_DL, IF_EB("\033|d", ESC_STR "|d")}, # ifdef TERMINFO ! {(int)KS_CDL, IF_EB("\033|%p1%dD", ESC_STR "|%p1%dD")}, ! {(int)KS_CS, IF_EB("\033|%p1%d;%p2%dR", ESC_STR "|%p1%d;%p2%dR")}, ! {(int)KS_CSV, IF_EB("\033|%p1%d;%p2%dV", ESC_STR "|%p1%d;%p2%dV")}, # else ! {(int)KS_CDL, IF_EB("\033|%dD", ESC_STR "|%dD")}, ! {(int)KS_CS, IF_EB("\033|%d;%dR", ESC_STR "|%d;%dR")}, ! {(int)KS_CSV, IF_EB("\033|%d;%dV", ESC_STR "|%d;%dV")}, # endif ! {(int)KS_CL, IF_EB("\033|C", ESC_STR "|C")}, // attributes switched on with 'h', off with * 'H' ! {(int)KS_ME, IF_EB("\033|31H", ESC_STR "|31H")}, // HL_ALL ! {(int)KS_MR, IF_EB("\033|1h", ESC_STR "|1h")}, // HL_INVERSE ! {(int)KS_MD, IF_EB("\033|2h", ESC_STR "|2h")}, // HL_BOLD ! {(int)KS_SE, IF_EB("\033|16H", ESC_STR "|16H")}, // HL_STANDOUT ! {(int)KS_SO, IF_EB("\033|16h", ESC_STR "|16h")}, // HL_STANDOUT ! {(int)KS_UE, IF_EB("\033|8H", ESC_STR "|8H")}, // HL_UNDERLINE ! {(int)KS_US, IF_EB("\033|8h", ESC_STR "|8h")}, // HL_UNDERLINE ! {(int)KS_UCE, IF_EB("\033|8C", ESC_STR "|8C")}, // HL_UNDERCURL ! {(int)KS_UCS, IF_EB("\033|8c", ESC_STR "|8c")}, // HL_UNDERCURL ! {(int)KS_STE, IF_EB("\033|4C", ESC_STR "|4C")}, // HL_STRIKETHROUGH ! {(int)KS_STS, IF_EB("\033|4c", ESC_STR "|4c")}, // HL_STRIKETHROUGH ! {(int)KS_CZR, IF_EB("\033|4H", ESC_STR "|4H")}, // HL_ITALIC ! {(int)KS_CZH, IF_EB("\033|4h", ESC_STR "|4h")}, // HL_ITALIC ! {(int)KS_VB, IF_EB("\033|f", ESC_STR "|f")}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_XN, "y"}, {(int)KS_LE, "\b"}, // cursor-left = BS {(int)KS_ND, "\014"}, // cursor-right = CTRL-L # ifdef TERMINFO ! {(int)KS_CM, IF_EB("\033|%p1%d;%p2%dM", ESC_STR "|%p1%d;%p2%dM")}, # else ! {(int)KS_CM, IF_EB("\033|%d;%dM", ESC_STR "|%d;%dM")}, # endif // there are no key sequences here, the GUI sequences are recognized // in check_termcode() --- 222,269 ---- * GUI pseudo term-cap. */ {(int)KS_NAME, "gui"}, ! {(int)KS_CE, "\033|$"}, ! {(int)KS_AL, "\033|i"}, # ifdef TERMINFO ! {(int)KS_CAL, "\033|%p1%dI"}, # else ! {(int)KS_CAL, "\033|%dI"}, # endif ! {(int)KS_DL, "\033|d"}, # ifdef TERMINFO ! {(int)KS_CDL, "\033|%p1%dD"}, ! {(int)KS_CS, "\033|%p1%d;%p2%dR"}, ! {(int)KS_CSV, "\033|%p1%d;%p2%dV"}, # else ! {(int)KS_CDL, "\033|%dD"}, ! {(int)KS_CS, "\033|%d;%dR"}, ! {(int)KS_CSV, "\033|%d;%dV"}, # endif ! {(int)KS_CL, "\033|C"}, // attributes switched on with 'h', off with * 'H' ! {(int)KS_ME, "\033|31H"}, // HL_ALL ! {(int)KS_MR, "\033|1h"}, // HL_INVERSE ! {(int)KS_MD, "\033|2h"}, // HL_BOLD ! {(int)KS_SE, "\033|16H"}, // HL_STANDOUT ! {(int)KS_SO, "\033|16h"}, // HL_STANDOUT ! {(int)KS_UE, "\033|8H"}, // HL_UNDERLINE ! {(int)KS_US, "\033|8h"}, // HL_UNDERLINE ! {(int)KS_UCE, "\033|8C"}, // HL_UNDERCURL ! {(int)KS_UCS, "\033|8c"}, // HL_UNDERCURL ! {(int)KS_STE, "\033|4C"}, // HL_STRIKETHROUGH ! {(int)KS_STS, "\033|4c"}, // HL_STRIKETHROUGH ! {(int)KS_CZR, "\033|4H"}, // HL_ITALIC ! {(int)KS_CZH, "\033|4h"}, // HL_ITALIC ! {(int)KS_VB, "\033|f"}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_XN, "y"}, {(int)KS_LE, "\b"}, // cursor-left = BS {(int)KS_ND, "\014"}, // cursor-right = CTRL-L # ifdef TERMINFO ! {(int)KS_CM, "\033|%p1%d;%p2%dM"}, # else ! {(int)KS_CM, "\033|%d;%dM"}, # endif // there are no key sequences here, the GUI sequences are recognized // in check_termcode() *************** *** 438,471 **** * standard ANSI terminal, default for unix */ {(int)KS_NAME, "ansi"}, ! {(int)KS_CE, IF_EB("\033[K", ESC_STR "[K")}, ! {(int)KS_AL, IF_EB("\033[L", ESC_STR "[L")}, # ifdef TERMINFO ! {(int)KS_CAL, IF_EB("\033[%p1%dL", ESC_STR "[%p1%dL")}, # else ! {(int)KS_CAL, IF_EB("\033[%dL", ESC_STR "[%dL")}, # endif ! {(int)KS_DL, IF_EB("\033[M", ESC_STR "[M")}, # ifdef TERMINFO ! {(int)KS_CDL, IF_EB("\033[%p1%dM", ESC_STR "[%p1%dM")}, # else ! {(int)KS_CDL, IF_EB("\033[%dM", ESC_STR "[%dM")}, # endif ! {(int)KS_CL, IF_EB("\033[H\033[2J", ESC_STR "[H" ESC_STR_nc "[2J")}, ! {(int)KS_ME, IF_EB("\033[0m", ESC_STR "[0m")}, ! {(int)KS_MR, IF_EB("\033[7m", ESC_STR "[7m")}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, // guessed {(int)KS_LE, "\b"}, # ifdef TERMINFO ! {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", ESC_STR "[%i%p1%d;%p2%dH")}, # else ! {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, # endif # ifdef TERMINFO ! {(int)KS_CRI, IF_EB("\033[%p1%dC", ESC_STR "[%p1%dC")}, # else ! {(int)KS_CRI, IF_EB("\033[%dC", ESC_STR "[%dC")}, # endif # endif --- 438,471 ---- * standard ANSI terminal, default for unix */ {(int)KS_NAME, "ansi"}, ! {(int)KS_CE, "\033[K"}, ! {(int)KS_AL, "\033[L"}, # ifdef TERMINFO ! {(int)KS_CAL, "\033[%p1%dL"}, # else ! {(int)KS_CAL, "\033[%dL"}, # endif ! {(int)KS_DL, "\033[M"}, # ifdef TERMINFO ! {(int)KS_CDL, "\033[%p1%dM"}, # else ! {(int)KS_CDL, "\033[%dM"}, # endif ! {(int)KS_CL, "\033[H\033[2J"}, ! {(int)KS_ME, "\033[0m"}, ! {(int)KS_MR, "\033[7m"}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, // guessed {(int)KS_LE, "\b"}, # ifdef TERMINFO ! {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, # else ! {(int)KS_CM, "\033[%i%d;%dH"}, # endif # ifdef TERMINFO ! {(int)KS_CRI, "\033[%p1%dC"}, # else ! {(int)KS_CRI, "\033[%dC"}, # endif # endif *************** *** 691,788 **** * - keyboard languages (CSI ? 26 n) */ {(int)KS_NAME, "vt320"}, ! {(int)KS_CE, IF_EB("\033[K", ESC_STR "[K")}, ! {(int)KS_AL, IF_EB("\033[L", ESC_STR "[L")}, # ifdef TERMINFO ! {(int)KS_CAL, IF_EB("\033[%p1%dL", ESC_STR "[%p1%dL")}, # else ! {(int)KS_CAL, IF_EB("\033[%dL", ESC_STR "[%dL")}, # endif ! {(int)KS_DL, IF_EB("\033[M", ESC_STR "[M")}, # ifdef TERMINFO ! {(int)KS_CDL, IF_EB("\033[%p1%dM", ESC_STR "[%p1%dM")}, # else ! {(int)KS_CDL, IF_EB("\033[%dM", ESC_STR "[%dM")}, # endif ! {(int)KS_CL, IF_EB("\033[H\033[2J", ESC_STR "[H" ESC_STR_nc "[2J")}, ! {(int)KS_CD, IF_EB("\033[J", ESC_STR "[J")}, {(int)KS_CCO, "8"}, // allow 8 colors ! {(int)KS_ME, IF_EB("\033[0m", ESC_STR "[0m")}, ! {(int)KS_MR, IF_EB("\033[7m", ESC_STR "[7m")}, ! {(int)KS_MD, IF_EB("\033[1m", ESC_STR "[1m")}, // bold mode ! {(int)KS_SE, IF_EB("\033[22m", ESC_STR "[22m")},// normal mode ! {(int)KS_UE, IF_EB("\033[24m", ESC_STR "[24m")},// exit underscore mode ! {(int)KS_US, IF_EB("\033[4m", ESC_STR "[4m")}, // underscore mode ! {(int)KS_CZH, IF_EB("\033[34;43m", ESC_STR "[34;43m")}, // italic mode: blue text on yellow ! {(int)KS_CZR, IF_EB("\033[0m", ESC_STR "[0m")}, // italic mode end ! {(int)KS_CAB, IF_EB("\033[4%dm", ESC_STR "[4%dm")}, // set background color (ANSI) ! {(int)KS_CAF, IF_EB("\033[3%dm", ESC_STR "[3%dm")}, // set foreground color (ANSI) ! {(int)KS_CSB, IF_EB("\033[102;%dm", ESC_STR "[102;%dm")}, // set screen background color ! {(int)KS_CSF, IF_EB("\033[101;%dm", ESC_STR "[101;%dm")}, // set screen foreground color {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_XN, "y"}, {(int)KS_LE, "\b"}, # ifdef TERMINFO ! {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", ! ESC_STR "[%i%p1%d;%p2%dH")}, # else ! {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, # endif # ifdef TERMINFO ! {(int)KS_CRI, IF_EB("\033[%p1%dC", ESC_STR "[%p1%dC")}, # else ! {(int)KS_CRI, IF_EB("\033[%dC", ESC_STR "[%dC")}, # endif ! {K_UP, IF_EB("\033[A", ESC_STR "[A")}, ! {K_DOWN, IF_EB("\033[B", ESC_STR "[B")}, ! {K_RIGHT, IF_EB("\033[C", ESC_STR "[C")}, ! {K_LEFT, IF_EB("\033[D", ESC_STR "[D")}, // Note: cursor key sequences for application cursor mode are omitted, // because they interfere with typed commands: OA. ! {K_F1, IF_EB("\033[11~", ESC_STR "[11~")}, ! {K_F2, IF_EB("\033[12~", ESC_STR "[12~")}, ! {K_F3, IF_EB("\033[13~", ESC_STR "[13~")}, ! {K_F4, IF_EB("\033[14~", ESC_STR "[14~")}, ! {K_F5, IF_EB("\033[15~", ESC_STR "[15~")}, ! {K_F6, IF_EB("\033[17~", ESC_STR "[17~")}, ! {K_F7, IF_EB("\033[18~", ESC_STR "[18~")}, ! {K_F8, IF_EB("\033[19~", ESC_STR "[19~")}, ! {K_F9, IF_EB("\033[20~", ESC_STR "[20~")}, ! {K_F10, IF_EB("\033[21~", ESC_STR "[21~")}, ! {K_F11, IF_EB("\033[23~", ESC_STR "[23~")}, ! {K_F12, IF_EB("\033[24~", ESC_STR "[24~")}, ! {K_F13, IF_EB("\033[25~", ESC_STR "[25~")}, ! {K_F14, IF_EB("\033[26~", ESC_STR "[26~")}, ! {K_F15, IF_EB("\033[28~", ESC_STR "[28~")}, // Help ! {K_F16, IF_EB("\033[29~", ESC_STR "[29~")}, // Select ! {K_F17, IF_EB("\033[31~", ESC_STR "[31~")}, ! {K_F18, IF_EB("\033[32~", ESC_STR "[32~")}, ! {K_F19, IF_EB("\033[33~", ESC_STR "[33~")}, ! {K_F20, IF_EB("\033[34~", ESC_STR "[34~")}, ! {K_INS, IF_EB("\033[2~", ESC_STR "[2~")}, ! {K_DEL, IF_EB("\033[3~", ESC_STR "[3~")}, ! {K_HOME, IF_EB("\033[1~", ESC_STR "[1~")}, ! {K_END, IF_EB("\033[4~", ESC_STR "[4~")}, ! {K_PAGEUP, IF_EB("\033[5~", ESC_STR "[5~")}, ! {K_PAGEDOWN, IF_EB("\033[6~", ESC_STR "[6~")}, // These sequences starting with O may interfere with what the user // is typing. Remove these if that bothers you. ! {K_KPLUS, IF_EB("\033Ok", ESC_STR "Ok")}, // keypad plus ! {K_KMINUS, IF_EB("\033Om", ESC_STR "Om")}, // keypad minus ! {K_KDIVIDE, IF_EB("\033Oo", ESC_STR "Oo")}, // keypad / ! {K_KMULTIPLY, IF_EB("\033Oj", ESC_STR "Oj")}, // keypad * ! {K_KENTER, IF_EB("\033OM", ESC_STR "OM")}, // keypad Enter ! {K_K0, IF_EB("\033Op", ESC_STR "Op")}, // keypad 0 ! {K_K1, IF_EB("\033Oq", ESC_STR "Oq")}, // keypad 1 ! {K_K2, IF_EB("\033Or", ESC_STR "Or")}, // keypad 2 ! {K_K3, IF_EB("\033Os", ESC_STR "Os")}, // keypad 3 ! {K_K4, IF_EB("\033Ot", ESC_STR "Ot")}, // keypad 4 ! {K_K5, IF_EB("\033Ou", ESC_STR "Ou")}, // keypad 5 ! {K_K6, IF_EB("\033Ov", ESC_STR "Ov")}, // keypad 6 ! {K_K7, IF_EB("\033Ow", ESC_STR "Ow")}, // keypad 7 ! {K_K8, IF_EB("\033Ox", ESC_STR "Ox")}, // keypad 8 ! {K_K9, IF_EB("\033Oy", ESC_STR "Oy")}, // keypad 9 {K_BS, "\x7f"}, // for some reason 0177 doesn't work # endif --- 691,787 ---- * - keyboard languages (CSI ? 26 n) */ {(int)KS_NAME, "vt320"}, ! {(int)KS_CE, "\033[K"}, ! {(int)KS_AL, "\033[L"}, # ifdef TERMINFO ! {(int)KS_CAL, "\033[%p1%dL"}, # else ! {(int)KS_CAL, "\033[%dL"}, # endif ! {(int)KS_DL, "\033[M"}, # ifdef TERMINFO ! {(int)KS_CDL, "\033[%p1%dM"}, # else ! {(int)KS_CDL, "\033[%dM"}, # endif ! {(int)KS_CL, "\033[H\033[2J"}, ! {(int)KS_CD, "\033[J"}, {(int)KS_CCO, "8"}, // allow 8 colors ! {(int)KS_ME, "\033[0m"}, ! {(int)KS_MR, "\033[7m"}, ! {(int)KS_MD, "\033[1m"}, // bold mode ! {(int)KS_SE, "\033[22m"},// normal mode ! {(int)KS_UE, "\033[24m"},// exit underscore mode ! {(int)KS_US, "\033[4m"}, // underscore mode ! {(int)KS_CZH, "\033[34;43m"}, // italic mode: blue text on yellow ! {(int)KS_CZR, "\033[0m"}, // italic mode end ! {(int)KS_CAB, "\033[4%dm"}, // set background color (ANSI) ! {(int)KS_CAF, "\033[3%dm"}, // set foreground color (ANSI) ! {(int)KS_CSB, "\033[102;%dm"}, // set screen background color ! {(int)KS_CSF, "\033[101;%dm"}, // set screen foreground color {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_XN, "y"}, {(int)KS_LE, "\b"}, # ifdef TERMINFO ! {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, # else ! {(int)KS_CM, "\033[%i%d;%dH"}, # endif # ifdef TERMINFO ! {(int)KS_CRI, "\033[%p1%dC"}, # else ! {(int)KS_CRI, "\033[%dC"}, # endif ! {K_UP, "\033[A"}, ! {K_DOWN, "\033[B"}, ! {K_RIGHT, "\033[C"}, ! {K_LEFT, "\033[D"}, // Note: cursor key sequences for application cursor mode are omitted, // because they interfere with typed commands: OA. ! {K_F1, "\033[11~"}, ! {K_F2, "\033[12~"}, ! {K_F3, "\033[13~"}, ! {K_F4, "\033[14~"}, ! {K_F5, "\033[15~"}, ! {K_F6, "\033[17~"}, ! {K_F7, "\033[18~"}, ! {K_F8, "\033[19~"}, ! {K_F9, "\033[20~"}, ! {K_F10, "\033[21~"}, ! {K_F11, "\033[23~"}, ! {K_F12, "\033[24~"}, ! {K_F13, "\033[25~"}, ! {K_F14, "\033[26~"}, ! {K_F15, "\033[28~"}, // Help ! {K_F16, "\033[29~"}, // Select ! {K_F17, "\033[31~"}, ! {K_F18, "\033[32~"}, ! {K_F19, "\033[33~"}, ! {K_F20, "\033[34~"}, ! {K_INS, "\033[2~"}, ! {K_DEL, "\033[3~"}, ! {K_HOME, "\033[1~"}, ! {K_END, "\033[4~"}, ! {K_PAGEUP, "\033[5~"}, ! {K_PAGEDOWN, "\033[6~"}, // These sequences starting with O may interfere with what the user // is typing. Remove these if that bothers you. ! {K_KPLUS, "\033Ok"}, // keypad plus ! {K_KMINUS, "\033Om"}, // keypad minus ! {K_KDIVIDE, "\033Oo"}, // keypad / ! {K_KMULTIPLY, "\033Oj"}, // keypad * ! {K_KENTER, "\033OM"}, // keypad Enter ! {K_K0, "\033Op"}, // keypad 0 ! {K_K1, "\033Oq"}, // keypad 1 ! {K_K2, "\033Or"}, // keypad 2 ! {K_K3, "\033Os"}, // keypad 3 ! {K_K4, "\033Ot"}, // keypad 4 ! {K_K5, "\033Ou"}, // keypad 5 ! {K_K6, "\033Ov"}, // keypad 6 ! {K_K7, "\033Ow"}, // keypad 7 ! {K_K8, "\033Ox"}, // keypad 8 ! {K_K9, "\033Oy"}, // keypad 9 {K_BS, "\x7f"}, // for some reason 0177 doesn't work # endif *************** *** 791,1016 **** * Ordinary vt52 */ {(int)KS_NAME, "vt52"}, ! {(int)KS_CE, IF_EB("\033K", ESC_STR "K")}, ! {(int)KS_CD, IF_EB("\033J", ESC_STR "J")}, # ifdef TERMINFO ! {(int)KS_CM, IF_EB("\033Y%p1%' '%+%c%p2%' '%+%c", ! ESC_STR "Y%p1%' '%+%c%p2%' '%+%c")}, # else ! {(int)KS_CM, IF_EB("\033Y%+ %+ ", ESC_STR "Y%+ %+ ")}, # endif {(int)KS_LE, "\b"}, ! {(int)KS_SR, IF_EB("\033I", ESC_STR "I")}, ! {(int)KS_AL, IF_EB("\033L", ESC_STR "L")}, ! {(int)KS_DL, IF_EB("\033M", ESC_STR "M")}, ! {K_UP, IF_EB("\033A", ESC_STR "A")}, ! {K_DOWN, IF_EB("\033B", ESC_STR "B")}, ! {K_LEFT, IF_EB("\033D", ESC_STR "D")}, ! {K_RIGHT, IF_EB("\033C", ESC_STR "C")}, ! {K_F1, IF_EB("\033P", ESC_STR "P")}, ! {K_F2, IF_EB("\033Q", ESC_STR "Q")}, ! {K_F3, IF_EB("\033R", ESC_STR "R")}, ! {(int)KS_CL, IF_EB("\033H\033J", ESC_STR "H" ESC_STR_nc "J")}, {(int)KS_MS, "y"}, # endif # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) || defined(SOME_BUILTIN_TCAPS) {(int)KS_NAME, "xterm"}, ! {(int)KS_CE, IF_EB("\033[K", ESC_STR "[K")}, ! {(int)KS_AL, IF_EB("\033[L", ESC_STR "[L")}, # ifdef TERMINFO ! {(int)KS_CAL, IF_EB("\033[%p1%dL", ESC_STR "[%p1%dL")}, # else ! {(int)KS_CAL, IF_EB("\033[%dL", ESC_STR "[%dL")}, # endif ! {(int)KS_DL, IF_EB("\033[M", ESC_STR "[M")}, # ifdef TERMINFO ! {(int)KS_CDL, IF_EB("\033[%p1%dM", ESC_STR "[%p1%dM")}, # else ! {(int)KS_CDL, IF_EB("\033[%dM", ESC_STR "[%dM")}, # endif # ifdef TERMINFO ! {(int)KS_CS, IF_EB("\033[%i%p1%d;%p2%dr", ! ESC_STR "[%i%p1%d;%p2%dr")}, # else ! {(int)KS_CS, IF_EB("\033[%i%d;%dr", ESC_STR "[%i%d;%dr")}, # endif ! {(int)KS_CL, IF_EB("\033[H\033[2J", ESC_STR "[H" ESC_STR_nc "[2J")}, ! {(int)KS_CD, IF_EB("\033[J", ESC_STR "[J")}, ! {(int)KS_ME, IF_EB("\033[m", ESC_STR "[m")}, ! {(int)KS_MR, IF_EB("\033[7m", ESC_STR "[7m")}, ! {(int)KS_MD, IF_EB("\033[1m", ESC_STR "[1m")}, ! {(int)KS_UE, IF_EB("\033[m", ESC_STR "[m")}, ! {(int)KS_US, IF_EB("\033[4m", ESC_STR "[4m")}, ! {(int)KS_STE, IF_EB("\033[29m", ESC_STR "[29m")}, ! {(int)KS_STS, IF_EB("\033[9m", ESC_STR "[9m")}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_LE, "\b"}, ! {(int)KS_VI, IF_EB("\033[?25l", ESC_STR "[?25l")}, ! {(int)KS_VE, IF_EB("\033[?25h", ESC_STR "[?25h")}, ! {(int)KS_VS, IF_EB("\033[?12h", ESC_STR "[?12h")}, ! {(int)KS_CVS, IF_EB("\033[?12l", ESC_STR "[?12l")}, # ifdef TERMINFO ! {(int)KS_CSH, IF_EB("\033[%p1%d q", ESC_STR "[%p1%d q")}, # else ! {(int)KS_CSH, IF_EB("\033[%d q", ESC_STR "[%d q")}, # endif ! {(int)KS_CRC, IF_EB("\033[?12$p", ESC_STR "[?12$p")}, ! {(int)KS_CRS, IF_EB("\033P$q q\033\\", ESC_STR "P$q q" ESC_STR "\\")}, # ifdef TERMINFO ! {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", ! ESC_STR "[%i%p1%d;%p2%dH")}, # else ! {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, # endif ! {(int)KS_SR, IF_EB("\033M", ESC_STR "M")}, # ifdef TERMINFO ! {(int)KS_CRI, IF_EB("\033[%p1%dC", ESC_STR "[%p1%dC")}, # else ! {(int)KS_CRI, IF_EB("\033[%dC", ESC_STR "[%dC")}, # endif ! {(int)KS_KS, IF_EB("\033[?1h\033=", ESC_STR "[?1h" ESC_STR_nc "=")}, ! {(int)KS_KE, IF_EB("\033[?1l\033>", ESC_STR "[?1l" ESC_STR_nc ">")}, # ifdef FEAT_XTERM_SAVE ! {(int)KS_TI, IF_EB("\0337\033[?47h", ESC_STR "7" ESC_STR_nc "[?47h")}, ! {(int)KS_TE, IF_EB("\033[?47l\0338", ! ESC_STR_nc "[?47l" ESC_STR_nc "8")}, ! # endif ! {(int)KS_CTI, IF_EB("\033[>4;2m", ESC_STR_nc "[>4;2m")}, ! {(int)KS_CTE, IF_EB("\033[>4;m", ESC_STR_nc "[>4;m")}, ! {(int)KS_CIS, IF_EB("\033]1;", ESC_STR "]1;")}, {(int)KS_CIE, "\007"}, ! {(int)KS_TS, IF_EB("\033]2;", ESC_STR "]2;")}, {(int)KS_FS, "\007"}, ! {(int)KS_CSC, IF_EB("\033]12;", ESC_STR "]12;")}, {(int)KS_CEC, "\007"}, # ifdef TERMINFO ! {(int)KS_CWS, IF_EB("\033[8;%p1%d;%p2%dt", ! ESC_STR "[8;%p1%d;%p2%dt")}, ! {(int)KS_CWP, IF_EB("\033[3;%p1%d;%p2%dt", ! ESC_STR "[3;%p1%d;%p2%dt")}, ! {(int)KS_CGP, IF_EB("\033[13t", ESC_STR "[13t")}, ! # else ! {(int)KS_CWS, IF_EB("\033[8;%d;%dt", ESC_STR "[8;%d;%dt")}, ! {(int)KS_CWP, IF_EB("\033[3;%d;%dt", ESC_STR "[3;%d;%dt")}, ! {(int)KS_CGP, IF_EB("\033[13t", ESC_STR "[13t")}, ! # endif ! {(int)KS_CRV, IF_EB("\033[>c", ESC_STR "[>c")}, ! {(int)KS_RFG, IF_EB("\033]10;?\007", ESC_STR "]10;?\007")}, ! {(int)KS_RBG, IF_EB("\033]11;?\007", ESC_STR "]11;?\007")}, ! {(int)KS_U7, IF_EB("\033[6n", ESC_STR "[6n")}, # ifdef FEAT_TERMGUICOLORS // These are printf strings, not terminal codes. ! {(int)KS_8F, IF_EB("\033[38;2;%lu;%lu;%lum", ESC_STR "[38;2;%lu;%lu;%lum")}, ! {(int)KS_8B, IF_EB("\033[48;2;%lu;%lu;%lum", ESC_STR "[48;2;%lu;%lu;%lum")}, ! {(int)KS_8U, IF_EB("\033[58;2;%lu;%lu;%lum", ESC_STR "[58;2;%lu;%lu;%lum")}, ! # endif ! {(int)KS_CAU, IF_EB("\033[58;5;%dm", ESC_STR "[58;5;%dm")}, ! {(int)KS_CBE, IF_EB("\033[?2004h", ESC_STR "[?2004h")}, ! {(int)KS_CBD, IF_EB("\033[?2004l", ESC_STR "[?2004l")}, ! {(int)KS_CST, IF_EB("\033[22;2t", ESC_STR "[22;2t")}, ! {(int)KS_CRT, IF_EB("\033[23;2t", ESC_STR "[23;2t")}, ! {(int)KS_SSI, IF_EB("\033[22;1t", ESC_STR "[22;1t")}, ! {(int)KS_SRI, IF_EB("\033[23;1t", ESC_STR "[23;1t")}, # if (defined(UNIX) || defined(VMS)) ! {(int)KS_FD, IF_EB("\033[?1004l", ESC_STR "[?1004l")}, ! {(int)KS_FE, IF_EB("\033[?1004h", ESC_STR "[?1004h")}, # endif ! {K_UP, IF_EB("\033O*A", ESC_STR "O*A")}, ! {K_DOWN, IF_EB("\033O*B", ESC_STR "O*B")}, ! {K_RIGHT, IF_EB("\033O*C", ESC_STR "O*C")}, ! {K_LEFT, IF_EB("\033O*D", ESC_STR "O*D")}, // An extra set of cursor keys for vt100 mode ! {K_XUP, IF_EB("\033[@;*A", ESC_STR "[@;*A")}, ! {K_XDOWN, IF_EB("\033[@;*B", ESC_STR "[@;*B")}, ! {K_XRIGHT, IF_EB("\033[@;*C", ESC_STR "[@;*C")}, ! {K_XLEFT, IF_EB("\033[@;*D", ESC_STR "[@;*D")}, // An extra set of function keys for vt100 mode ! {K_XF1, IF_EB("\033O*P", ESC_STR "O*P")}, ! {K_XF2, IF_EB("\033O*Q", ESC_STR "O*Q")}, ! {K_XF3, IF_EB("\033O*R", ESC_STR "O*R")}, ! {K_XF4, IF_EB("\033O*S", ESC_STR "O*S")}, ! {K_F1, IF_EB("\033[11;*~", ESC_STR "[11;*~")}, ! {K_F2, IF_EB("\033[12;*~", ESC_STR "[12;*~")}, ! {K_F3, IF_EB("\033[13;*~", ESC_STR "[13;*~")}, ! {K_F4, IF_EB("\033[14;*~", ESC_STR "[14;*~")}, ! {K_F5, IF_EB("\033[15;*~", ESC_STR "[15;*~")}, ! {K_F6, IF_EB("\033[17;*~", ESC_STR "[17;*~")}, ! {K_F7, IF_EB("\033[18;*~", ESC_STR "[18;*~")}, ! {K_F8, IF_EB("\033[19;*~", ESC_STR "[19;*~")}, ! {K_F9, IF_EB("\033[20;*~", ESC_STR "[20;*~")}, ! {K_F10, IF_EB("\033[21;*~", ESC_STR "[21;*~")}, ! {K_F11, IF_EB("\033[23;*~", ESC_STR "[23;*~")}, ! {K_F12, IF_EB("\033[24;*~", ESC_STR "[24;*~")}, ! {K_S_TAB, IF_EB("\033[Z", ESC_STR "[Z")}, ! {K_HELP, IF_EB("\033[28;*~", ESC_STR "[28;*~")}, ! {K_UNDO, IF_EB("\033[26;*~", ESC_STR "[26;*~")}, ! {K_INS, IF_EB("\033[2;*~", ESC_STR "[2;*~")}, ! {K_HOME, IF_EB("\033[1;*H", ESC_STR "[1;*H")}, ! // {K_S_HOME, IF_EB("\033O2H", ESC_STR "O2H")}, ! // {K_C_HOME, IF_EB("\033O5H", ESC_STR "O5H")}, ! {K_KHOME, IF_EB("\033[1;*~", ESC_STR "[1;*~")}, ! {K_XHOME, IF_EB("\033O*H", ESC_STR "O*H")}, // other Home ! {K_ZHOME, IF_EB("\033[7;*~", ESC_STR "[7;*~")}, // other Home ! {K_END, IF_EB("\033[1;*F", ESC_STR "[1;*F")}, ! // {K_S_END, IF_EB("\033O2F", ESC_STR "O2F")}, ! // {K_C_END, IF_EB("\033O5F", ESC_STR "O5F")}, ! {K_KEND, IF_EB("\033[4;*~", ESC_STR "[4;*~")}, ! {K_XEND, IF_EB("\033O*F", ESC_STR "O*F")}, // other End ! {K_ZEND, IF_EB("\033[8;*~", ESC_STR "[8;*~")}, ! {K_PAGEUP, IF_EB("\033[5;*~", ESC_STR "[5;*~")}, ! {K_PAGEDOWN, IF_EB("\033[6;*~", ESC_STR "[6;*~")}, ! {K_KPLUS, IF_EB("\033O*k", ESC_STR "O*k")}, // keypad plus ! {K_KMINUS, IF_EB("\033O*m", ESC_STR "O*m")}, // keypad minus ! {K_KDIVIDE, IF_EB("\033O*o", ESC_STR "O*o")}, // keypad / ! {K_KMULTIPLY, IF_EB("\033O*j", ESC_STR "O*j")}, // keypad * ! {K_KENTER, IF_EB("\033O*M", ESC_STR "O*M")}, // keypad Enter ! {K_KPOINT, IF_EB("\033O*n", ESC_STR "O*n")}, // keypad . ! {K_K0, IF_EB("\033O*p", ESC_STR "O*p")}, // keypad 0 ! {K_K1, IF_EB("\033O*q", ESC_STR "O*q")}, // keypad 1 ! {K_K2, IF_EB("\033O*r", ESC_STR "O*r")}, // keypad 2 ! {K_K3, IF_EB("\033O*s", ESC_STR "O*s")}, // keypad 3 ! {K_K4, IF_EB("\033O*t", ESC_STR "O*t")}, // keypad 4 ! {K_K5, IF_EB("\033O*u", ESC_STR "O*u")}, // keypad 5 ! {K_K6, IF_EB("\033O*v", ESC_STR "O*v")}, // keypad 6 ! {K_K7, IF_EB("\033O*w", ESC_STR "O*w")}, // keypad 7 ! {K_K8, IF_EB("\033O*x", ESC_STR "O*x")}, // keypad 8 ! {K_K9, IF_EB("\033O*y", ESC_STR "O*y")}, // keypad 9 ! {K_KDEL, IF_EB("\033[3;*~", ESC_STR "[3;*~")}, // keypad Del ! {K_PS, IF_EB("\033[200~", ESC_STR "[200~")}, // paste start ! {K_PE, IF_EB("\033[201~", ESC_STR "[201~")}, // paste end {BT_EXTRA_KEYS, ""}, ! {TERMCAP2KEY('k', '0'), IF_EB("\033[10;*~", ESC_STR "[10;*~")}, // F0 ! {TERMCAP2KEY('F', '3'), IF_EB("\033[25;*~", ESC_STR "[25;*~")}, // F13 // F14 and F15 are missing, because they send the same codes as the undo // and help key, although they don't work on all keyboards. ! {TERMCAP2KEY('F', '6'), IF_EB("\033[29;*~", ESC_STR "[29;*~")}, // F16 ! {TERMCAP2KEY('F', '7'), IF_EB("\033[31;*~", ESC_STR "[31;*~")}, // F17 ! {TERMCAP2KEY('F', '8'), IF_EB("\033[32;*~", ESC_STR "[32;*~")}, // F18 ! {TERMCAP2KEY('F', '9'), IF_EB("\033[33;*~", ESC_STR "[33;*~")}, // F19 ! {TERMCAP2KEY('F', 'A'), IF_EB("\033[34;*~", ESC_STR "[34;*~")}, // F20 ! ! {TERMCAP2KEY('F', 'B'), IF_EB("\033[42;*~", ESC_STR "[42;*~")}, // F21 ! {TERMCAP2KEY('F', 'C'), IF_EB("\033[43;*~", ESC_STR "[43;*~")}, // F22 ! {TERMCAP2KEY('F', 'D'), IF_EB("\033[44;*~", ESC_STR "[44;*~")}, // F23 ! {TERMCAP2KEY('F', 'E'), IF_EB("\033[45;*~", ESC_STR "[45;*~")}, // F24 ! {TERMCAP2KEY('F', 'F'), IF_EB("\033[46;*~", ESC_STR "[46;*~")}, // F25 ! {TERMCAP2KEY('F', 'G'), IF_EB("\033[47;*~", ESC_STR "[47;*~")}, // F26 ! {TERMCAP2KEY('F', 'H'), IF_EB("\033[48;*~", ESC_STR "[48;*~")}, // F27 ! {TERMCAP2KEY('F', 'I'), IF_EB("\033[49;*~", ESC_STR "[49;*~")}, // F28 ! {TERMCAP2KEY('F', 'J'), IF_EB("\033[50;*~", ESC_STR "[50;*~")}, // F29 ! {TERMCAP2KEY('F', 'K'), IF_EB("\033[51;*~", ESC_STR "[51;*~")}, // F30 ! ! {TERMCAP2KEY('F', 'L'), IF_EB("\033[52;*~", ESC_STR "[52;*~")}, // F31 ! {TERMCAP2KEY('F', 'M'), IF_EB("\033[53;*~", ESC_STR "[53;*~")}, // F32 ! {TERMCAP2KEY('F', 'N'), IF_EB("\033[54;*~", ESC_STR "[54;*~")}, // F33 ! {TERMCAP2KEY('F', 'O'), IF_EB("\033[55;*~", ESC_STR "[55;*~")}, // F34 ! {TERMCAP2KEY('F', 'P'), IF_EB("\033[56;*~", ESC_STR "[56;*~")}, // F35 ! {TERMCAP2KEY('F', 'Q'), IF_EB("\033[57;*~", ESC_STR "[57;*~")}, // F36 ! {TERMCAP2KEY('F', 'R'), IF_EB("\033[58;*~", ESC_STR "[58;*~")}, // F37 # endif # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) --- 790,1009 ---- * Ordinary vt52 */ {(int)KS_NAME, "vt52"}, ! {(int)KS_CE, "\033K"}, ! {(int)KS_CD, "\033J"}, # ifdef TERMINFO ! {(int)KS_CM, "\033Y%p1%' '%+%c%p2%' '%+%c"}, # else ! {(int)KS_CM, "\033Y%+ %+ "}, # endif {(int)KS_LE, "\b"}, ! {(int)KS_SR, "\033I"}, ! {(int)KS_AL, "\033L"}, ! {(int)KS_DL, "\033M"}, ! {K_UP, "\033A"}, ! {K_DOWN, "\033B"}, ! {K_LEFT, "\033D"}, ! {K_RIGHT, "\033C"}, ! {K_F1, "\033P"}, ! {K_F2, "\033Q"}, ! {K_F3, "\033R"}, ! {(int)KS_CL, "\033H\033J"}, {(int)KS_MS, "y"}, # endif # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) || defined(SOME_BUILTIN_TCAPS) {(int)KS_NAME, "xterm"}, ! {(int)KS_CE, "\033[K"}, ! {(int)KS_AL, "\033[L"}, # ifdef TERMINFO ! {(int)KS_CAL, "\033[%p1%dL"}, # else ! {(int)KS_CAL, "\033[%dL"}, # endif ! {(int)KS_DL, "\033[M"}, # ifdef TERMINFO ! {(int)KS_CDL, "\033[%p1%dM"}, # else ! {(int)KS_CDL, "\033[%dM"}, # endif # ifdef TERMINFO ! {(int)KS_CS, "\033[%i%p1%d;%p2%dr"}, # else ! {(int)KS_CS, "\033[%i%d;%dr"}, # endif ! {(int)KS_CL, "\033[H\033[2J"}, ! {(int)KS_CD, "\033[J"}, ! {(int)KS_ME, "\033[m"}, ! {(int)KS_MR, "\033[7m"}, ! {(int)KS_MD, "\033[1m"}, ! {(int)KS_UE, "\033[m"}, ! {(int)KS_US, "\033[4m"}, ! {(int)KS_STE, "\033[29m"}, ! {(int)KS_STS, "\033[9m"}, {(int)KS_MS, "y"}, {(int)KS_UT, "y"}, {(int)KS_LE, "\b"}, ! {(int)KS_VI, "\033[?25l"}, ! {(int)KS_VE, "\033[?25h"}, ! {(int)KS_VS, "\033[?12h"}, ! {(int)KS_CVS, "\033[?12l"}, # ifdef TERMINFO ! {(int)KS_CSH, "\033[%p1%d q"}, # else ! {(int)KS_CSH, "\033[%d q"}, # endif ! {(int)KS_CRC, "\033[?12$p"}, ! {(int)KS_CRS, "\033P$q q\033\\"}, # ifdef TERMINFO ! {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, # else ! {(int)KS_CM, "\033[%i%d;%dH"}, # endif ! {(int)KS_SR, "\033M"}, # ifdef TERMINFO ! {(int)KS_CRI, "\033[%p1%dC"}, # else ! {(int)KS_CRI, "\033[%dC"}, # endif ! {(int)KS_KS, "\033[?1h\033="}, ! {(int)KS_KE, "\033[?1l\033>"}, # ifdef FEAT_XTERM_SAVE ! {(int)KS_TI, "\0337\033[?47h"}, ! {(int)KS_TE, "\033[?47l\0338"}, ! # endif ! {(int)KS_CTI, "\033[>4;2m"}, ! {(int)KS_CTE, "\033[>4;m"}, ! {(int)KS_CIS, "\033]1;"}, {(int)KS_CIE, "\007"}, ! {(int)KS_TS, "\033]2;"}, {(int)KS_FS, "\007"}, ! {(int)KS_CSC, "\033]12;"}, {(int)KS_CEC, "\007"}, # ifdef TERMINFO ! {(int)KS_CWS, "\033[8;%p1%d;%p2%dt"}, ! {(int)KS_CWP, "\033[3;%p1%d;%p2%dt"}, ! {(int)KS_CGP, "\033[13t"}, ! # else ! {(int)KS_CWS, "\033[8;%d;%dt"}, ! {(int)KS_CWP, "\033[3;%d;%dt"}, ! {(int)KS_CGP, "\033[13t"}, ! # endif ! {(int)KS_CRV, "\033[>c"}, ! {(int)KS_RFG, "\033]10;?\007"}, ! {(int)KS_RBG, "\033]11;?\007"}, ! {(int)KS_U7, "\033[6n"}, # ifdef FEAT_TERMGUICOLORS // These are printf strings, not terminal codes. ! {(int)KS_8F, "\033[38;2;%lu;%lu;%lum"}, ! {(int)KS_8B, "\033[48;2;%lu;%lu;%lum"}, ! {(int)KS_8U, "\033[58;2;%lu;%lu;%lum"}, ! # endif ! {(int)KS_CAU, "\033[58;5;%dm"}, ! {(int)KS_CBE, "\033[?2004h"}, ! {(int)KS_CBD, "\033[?2004l"}, ! {(int)KS_CST, "\033[22;2t"}, ! {(int)KS_CRT, "\033[23;2t"}, ! {(int)KS_SSI, "\033[22;1t"}, ! {(int)KS_SRI, "\033[23;1t"}, # if (defined(UNIX) || defined(VMS)) ! {(int)KS_FD, "\033[?1004l"}, ! {(int)KS_FE, "\033[?1004h"}, # endif ! {K_UP, "\033O*A"}, ! {K_DOWN, "\033O*B"}, ! {K_RIGHT, "\033O*C"}, ! {K_LEFT, "\033O*D"}, // An extra set of cursor keys for vt100 mode ! {K_XUP, "\033[@;*A"}, ! {K_XDOWN, "\033[@;*B"}, ! {K_XRIGHT, "\033[@;*C"}, ! {K_XLEFT, "\033[@;*D"}, // An extra set of function keys for vt100 mode ! {K_XF1, "\033O*P"}, ! {K_XF2, "\033O*Q"}, ! {K_XF3, "\033O*R"}, ! {K_XF4, "\033O*S"}, ! {K_F1, "\033[11;*~"}, ! {K_F2, "\033[12;*~"}, ! {K_F3, "\033[13;*~"}, ! {K_F4, "\033[14;*~"}, ! {K_F5, "\033[15;*~"}, ! {K_F6, "\033[17;*~"}, ! {K_F7, "\033[18;*~"}, ! {K_F8, "\033[19;*~"}, ! {K_F9, "\033[20;*~"}, ! {K_F10, "\033[21;*~"}, ! {K_F11, "\033[23;*~"}, ! {K_F12, "\033[24;*~"}, ! {K_S_TAB, "\033[Z"}, ! {K_HELP, "\033[28;*~"}, ! {K_UNDO, "\033[26;*~"}, ! {K_INS, "\033[2;*~"}, ! {K_HOME, "\033[1;*H"}, ! // {K_S_HOME, "\033O2H"}, ! // {K_C_HOME, "\033O5H"}, ! {K_KHOME, "\033[1;*~"}, ! {K_XHOME, "\033O*H"}, // other Home ! {K_ZHOME, "\033[7;*~"}, // other Home ! {K_END, "\033[1;*F"}, ! // {K_S_END, "\033O2F"}, ! // {K_C_END, "\033O5F"}, ! {K_KEND, "\033[4;*~"}, ! {K_XEND, "\033O*F"}, // other End ! {K_ZEND, "\033[8;*~"}, ! {K_PAGEUP, "\033[5;*~"}, ! {K_PAGEDOWN, "\033[6;*~"}, ! {K_KPLUS, "\033O*k"}, // keypad plus ! {K_KMINUS, "\033O*m"}, // keypad minus ! {K_KDIVIDE, "\033O*o"}, // keypad / ! {K_KMULTIPLY, "\033O*j"}, // keypad * ! {K_KENTER, "\033O*M"}, // keypad Enter ! {K_KPOINT, "\033O*n"}, // keypad . ! {K_K0, "\033O*p"}, // keypad 0 ! {K_K1, "\033O*q"}, // keypad 1 ! {K_K2, "\033O*r"}, // keypad 2 ! {K_K3, "\033O*s"}, // keypad 3 ! {K_K4, "\033O*t"}, // keypad 4 ! {K_K5, "\033O*u"}, // keypad 5 ! {K_K6, "\033O*v"}, // keypad 6 ! {K_K7, "\033O*w"}, // keypad 7 ! {K_K8, "\033O*x"}, // keypad 8 ! {K_K9, "\033O*y"}, // keypad 9 ! {K_KDEL, "\033[3;*~"}, // keypad Del ! {K_PS, "\033[200~"}, // paste start ! {K_PE, "\033[201~"}, // paste end {BT_EXTRA_KEYS, ""}, ! {TERMCAP2KEY('k', '0'), "\033[10;*~"}, // F0 ! {TERMCAP2KEY('F', '3'), "\033[25;*~"}, // F13 // F14 and F15 are missing, because they send the same codes as the undo // and help key, although they don't work on all keyboards. ! {TERMCAP2KEY('F', '6'), "\033[29;*~"}, // F16 ! {TERMCAP2KEY('F', '7'), "\033[31;*~"}, // F17 ! {TERMCAP2KEY('F', '8'), "\033[32;*~"}, // F18 ! {TERMCAP2KEY('F', '9'), "\033[33;*~"}, // F19 ! {TERMCAP2KEY('F', 'A'), "\033[34;*~"}, // F20 ! ! {TERMCAP2KEY('F', 'B'), "\033[42;*~"}, // F21 ! {TERMCAP2KEY('F', 'C'), "\033[43;*~"}, // F22 ! {TERMCAP2KEY('F', 'D'), "\033[44;*~"}, // F23 ! {TERMCAP2KEY('F', 'E'), "\033[45;*~"}, // F24 ! {TERMCAP2KEY('F', 'F'), "\033[46;*~"}, // F25 ! {TERMCAP2KEY('F', 'G'), "\033[47;*~"}, // F26 ! {TERMCAP2KEY('F', 'H'), "\033[48;*~"}, // F27 ! {TERMCAP2KEY('F', 'I'), "\033[49;*~"}, // F28 ! {TERMCAP2KEY('F', 'J'), "\033[50;*~"}, // F29 ! {TERMCAP2KEY('F', 'K'), "\033[51;*~"}, // F30 ! ! {TERMCAP2KEY('F', 'L'), "\033[52;*~"}, // F31 ! {TERMCAP2KEY('F', 'M'), "\033[53;*~"}, // F32 ! {TERMCAP2KEY('F', 'N'), "\033[54;*~"}, // F33 ! {TERMCAP2KEY('F', 'O'), "\033[55;*~"}, // F34 ! {TERMCAP2KEY('F', 'P'), "\033[56;*~"}, // F35 ! {TERMCAP2KEY('F', 'Q'), "\033[57;*~"}, // F36 ! {TERMCAP2KEY('F', 'R'), "\033[58;*~"}, // F37 # endif # if defined(UNIX) || defined(ALL_BUILTIN_TCAPS) *************** *** 1323,1332 **** {(int)KS_NAME, "dumb"}, {(int)KS_CL, "\014"}, #ifdef TERMINFO ! {(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", ! ESC_STR "[%i%p1%d;%p2%dH")}, #else ! {(int)KS_CM, IF_EB("\033[%i%d;%dH", ESC_STR "[%i%d;%dH")}, #endif /* --- 1316,1324 ---- {(int)KS_NAME, "dumb"}, {(int)KS_CL, "\014"}, #ifdef TERMINFO ! {(int)KS_CM, "\033[%i%p1%d;%p2%dH"}, #else ! {(int)KS_CM, "\033[%i%d;%dH"}, #endif /* *************** *** 2970,2978 **** #endif char *lead = i == 2 ? ( #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) ! s[1] == '|' ? IF_EB("\033|", ESC_STR "|") : #endif ! IF_EB("\033[", ESC_STR "[")) : "\233"; char *tail = s[i] == '3' ? (n >= 16 ? "38;5;" : "9") : (n >= 16 ? "48;5;" : "10"); --- 2962,2970 ---- #endif char *lead = i == 2 ? ( #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) ! s[1] == '|' ? "\033|" : #endif ! "\033[") : "\233"; char *tail = s[i] == '3' ? (n >= 16 ? "38;5;" : "9") : (n >= 16 ? "48;5;" : "10"); *************** *** 6523,6533 **** struct builtin_term *p; p = find_builtin_term(DEFAULT_TERM); ! sprintf(ksme_str, IF_EB("\033|%dm", ESC_STR "|%dm"), attr); ! sprintf(ksmd_str, IF_EB("\033|%dm", ESC_STR "|%dm"), ! attr | 0x08); // FOREGROUND_INTENSITY ! sprintf(ksmr_str, IF_EB("\033|%dm", ESC_STR "|%dm"), ! ((attr & 0x0F) << 4) | ((attr & 0xF0) >> 4)); while (p->bt_string != NULL) { --- 6515,6523 ---- struct builtin_term *p; p = find_builtin_term(DEFAULT_TERM); ! sprintf(ksme_str, "\033|%dm", attr); ! sprintf(ksmd_str, "\033|%dm", attr | 0x08); // FOREGROUND_INTENSITY ! sprintf(ksmr_str, "\033|%dm", ((attr & 0x0F) << 4) | ((attr & 0xF0) >> 4)); while (p->bt_string != NULL) { *** ../vim-8.2.4272/src/version.c 2022-01-31 13:36:32.076275510 +0000 --- src/version.c 2022-01-31 14:42:03.662879800 +0000 *************** *** 231,241 **** #else "-dnd", #endif - #ifdef EBCDIC - "+ebcdic", - #else "-ebcdic", - #endif #ifdef FEAT_EMACS_TAGS "+emacs_tags", #else --- 231,237 ---- *** ../vim-8.2.4272/src/viminfo.c 2022-01-08 16:19:18.513639814 +0000 --- src/viminfo.c 2022-01-31 14:42:58.334051823 +0000 *************** *** 162,168 **** // the string (e.g., variable name). Add something to the length for the // '<', NL and trailing NUL. if (len > LSIZE / 2) ! fprintf(fd, IF_EB("\026%d\n<", CTRL_V_STR "%d\n<"), len + 3); while ((c = *p++) != NUL) { --- 162,168 ---- // the string (e.g., variable name). Add something to the length for the // '<', NL and trailing NUL. if (len > LSIZE / 2) ! fprintf(fd, "\026%d\n<", len + 3); while ((c = *p++) != NUL) { *************** *** 2485,2495 **** // We only get here if line[0] == '\'' or '-'. // Illegal mark names are ignored (for future expansion). str = virp->vir_line + 1; ! if ( ! #ifndef EBCDIC ! *str <= 127 && ! #endif ! ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str))) || (*virp->vir_line == '-' && *str == '\''))) { if (*str == '\'') --- 2485,2493 ---- // We only get here if line[0] == '\'' or '-'. // Illegal mark names are ignored (for future expansion). str = virp->vir_line + 1; ! if (*str <= 127 ! && ((*virp->vir_line == '\'' ! && (VIM_ISDIGIT(*str) || isupper(*str))) || (*virp->vir_line == '-' && *str == '\''))) { if (*str == '\'') *** ../vim-8.2.4272/src/testdir/test_edit.vim 2022-01-24 15:27:47.179058453 +0000 --- src/testdir/test_edit.vim 2022-01-31 14:53:48.140188138 +0000 *************** *** 1073,1080 **** endfunc func Test_edit_CTRL_V() - CheckNotFeature ebcdic - new call setline(1, ['abc']) call cursor(2, 1) --- 1073,1078 ---- *************** *** 1631,1641 **** func Test_edit_special_chars() new ! if has("ebcdic") ! let t = "o\193\xc2\o303 \90a\xfg\o578\" ! else ! let t = "o\65\x42\o103 \33a\xfg\o78\" ! endif exe "normal " . t call assert_equal("ABC !a\g\8", getline(2)) --- 1629,1635 ---- func Test_edit_special_chars() new ! let t = "o\65\x42\o103 \33a\xfg\o78\" exe "normal " . t call assert_equal("ABC !a\g\8", getline(2)) *** ../vim-8.2.4272/src/testdir/test_exec_while_if.vim 2021-05-03 19:01:40.805808533 +0100 --- src/testdir/test_exec_while_if.vim 2022-01-31 14:54:30.955537721 +0000 *************** *** 6,16 **** let i = 0 while i < 12 let i = i + 1 ! if has("ebcdic") ! execute "normal o" . i . "\047" ! else ! execute "normal o" . i . "\033" ! endif if i % 2 normal Ax if i == 9 --- 6,12 ---- let i = 0 while i < 12 let i = i + 1 ! execute "normal o" . i . "\033" if i % 2 normal Ax if i == 9 *************** *** 21,41 **** else let j = 9 while j > 0 ! if has("ebcdic") ! execute "normal" j . "a" . j . "\x27" ! else ! execute "normal" j . "a" . j . "\x1b" ! endif let j = j - 1 endwhile endif endif if i == 9 ! if has("ebcdic") ! execute "normal Az\047" ! else ! execute "normal Az\033" ! endif endif endwhile unlet i j --- 17,29 ---- else let j = 9 while j > 0 ! execute "normal" j . "a" . j . "\x1b" let j = j - 1 endwhile endif endif if i == 9 ! execute "normal Az\033" endif endwhile unlet i j *** ../vim-8.2.4272/src/testdir/test_expr.vim 2022-01-29 21:45:30.485921485 +0000 --- src/testdir/test_expr.vim 2022-01-31 14:54:50.755237046 +0000 *************** *** 245,255 **** call assert_equal('65535', printf('%ld', 0xFFFF)) call assert_equal('131071', printf('%ld', 0x1FFFF)) ! if has('ebcdic') ! call assert_equal('#', printf('%c', 123)) ! else ! call assert_equal('{', printf('%c', 123)) ! endif call assert_equal('abc', printf('%s', 'abc')) call assert_equal('abc', printf('%S', 'abc')) --- 245,251 ---- call assert_equal('65535', printf('%ld', 0xFFFF)) call assert_equal('131071', printf('%ld', 0x1FFFF)) ! call assert_equal('{', printf('%c', 123)) call assert_equal('abc', printf('%s', 'abc')) call assert_equal('abc', printf('%S', 'abc')) *** ../vim-8.2.4272/src/testdir/test_gf.vim 2021-12-26 10:51:33.711079465 +0000 --- src/testdir/test_gf.vim 2022-01-31 14:55:13.502891591 +0000 *************** *** 19,29 **** call search("^second") call search("URL") call assert_equal("URL://machine.name/tmp/vimtest2b", expand("")) ! if has("ebcdic") ! set isf=@,240-249,/,.,-,_,+,,,$,:,~,\ ! else ! set isf=@,48-57,/,.,-,_,+,,,$,~,\ ! endif call search("^third") call search("name") call assert_equal("URL:\\\\machine.name\\vimtest2c", expand("")) --- 19,25 ---- call search("^second") call search("URL") call assert_equal("URL://machine.name/tmp/vimtest2b", expand("")) ! set isf=@,48-57,/,.,-,_,+,,,$,~,\ call search("^third") call search("name") call assert_equal("URL:\\\\machine.name\\vimtest2c", expand("")) *************** *** 90,100 **** " Test for invoking 'gf' on a ${VAR} variable func Test_gf() ! if has("ebcdic") ! set isfname=@,240-249,/,.,-,_,+,,,$,:,~,{,} ! else ! set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} ! endif call writefile(["Test for gf command"], "Xtest1") if has("unix") --- 86,92 ---- " Test for invoking 'gf' on a ${VAR} variable func Test_gf() ! set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} call writefile(["Test for gf command"], "Xtest1") if has("unix") *** ../vim-8.2.4272/src/testdir/test_regexp_utf8.vim 2021-09-07 18:26:46.114706317 +0100 --- src/testdir/test_regexp_utf8.vim 2022-01-31 14:55:52.662296971 +0000 *************** *** 152,160 **** if has('win32') let identchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' let kwordchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' - elseif has('ebcdic') - let identchars_ok = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz€ŒŽœž¬®µº¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' - let kwordchars_ok = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz€ŒŽœž¬®µº¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' else let identchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' let kwordchars_ok = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' --- 152,157 ---- *************** *** 166,173 **** let fnamechars_ok = '$+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' elseif has('vms') let fnamechars_ok = '#$%+,-./0123456789:;<>ABCDEFGHIJKLMNOPQRSTUVWXYZ[]_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' - elseif has('ebcdic') - let fnamechars_ok = '#$%+,-./=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' else let fnamechars_ok = '#$%+,-./0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' endif --- 163,168 ---- *** ../vim-8.2.4272/src/version.c 2022-01-31 13:36:32.076275510 +0000 --- src/version.c 2022-01-31 14:42:03.662879800 +0000 *************** *** 752,753 **** --- 748,751 ---- { /* Add new patch number below this line */ + /**/ + 4273, /**/ -- A village. Sound of chanting of Latin canon, punctuated by short, sharp cracks. It comes nearer. We see it is a line of MONKS ala SEVENTH SEAL flagellation scene, chanting and banging themselves on the foreheads with wooden boards. "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///