Skip to content

Commit

Permalink
patch 8.2.4273: the EBCDIC support is outdated
Browse files Browse the repository at this point in the history
Problem:    The EBCDIC support is outdated.
Solution:   Remove the EBCDIC support.
  • Loading branch information
brammool committed Jan 31, 2022
1 parent eb6c276 commit 424bcae
Show file tree
Hide file tree
Showing 43 changed files with 431 additions and 1,304 deletions.
94 changes: 0 additions & 94 deletions src/ascii.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,8 @@

/*
* 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')
Expand Down Expand Up @@ -77,94 +71,6 @@
#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
Expand Down
107 changes: 3 additions & 104 deletions src/charset.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,18 +87,11 @@ buf_init_chartab(
* Set the default size for printable characters:
* From <Space> 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)
{
Expand Down Expand Up @@ -221,10 +214,7 @@ buf_init_chartab(
}
else if (i == 1) // (re)set printable
{
if ((c < ' '
#ifndef EBCDIC
|| c > '~'
#endif
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))
Expand Down Expand Up @@ -519,13 +509,8 @@ transchar_buf(buf_T *buf, int c)
c = K_SECOND(c);
}

if ((!chartab_initialized && (
#ifdef EBCDIC
(c >= 64 && c < 255)
#else
(c >= ' ' && c <= '~')
#endif
)) || (c < 256 && vim_isprintc_strict(c)))
if ((!chartab_initialized && ((c >= ' ' && c <= '~')))
|| (c < 256 && vim_isprintc_strict(c)))
{
// printable character
transchar_charbuf[i] = c;
Expand Down Expand Up @@ -567,56 +552,26 @@ transchar_nonprint(buf_T *buf, char_u *charbuf, int c)
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;
}
}
Expand Down Expand Up @@ -2134,59 +2089,3 @@ backslash_halve_save(char_u *p)
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
8 changes: 1 addition & 7 deletions src/cindent.c
Original file line number Diff line number Diff line change
Expand Up @@ -3946,13 +3946,7 @@ in_cinkeys(
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 (*look == '^' && look[1] >= '?' && look[1] <= '_')
{
if (try_match && keytyped == Ctrl_chr(look[1]))
return TRUE;
Expand Down

0 comments on commit 424bcae

Please sign in to comment.