--- regexp_nfa.orig.c	2016-03-29 15:15:29.534915700 -0700
+++ regexp_nfa.c	2016-03-30 12:58:03.281475000 -0700
@@ -750,14 +750,127 @@
 					 || STRCMP(p_enc, "iso-8859-15") == 0)
 #endif
     {
+	#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 0300: case 0301: case 0302:
-	    case 0303: case 0304: case 0305:
+	    case  'A': case  A_grave: case A_acute: case A_circumflex:
+	    case A_virguilla: case A_diaeresis: case A_ring:
 	    CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
 	    CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
-		    EMIT2('A');	EMIT2(0300); EMIT2(0301); EMIT2(0302);
-		    EMIT2(0303); EMIT2(0304); EMIT2(0305);
+		    EMIT2('A');	EMIT2(A_grave); EMIT2(A_acute); EMIT2(A_circumflex);
+		    EMIT2(A_virguilla); EMIT2(A_diaeresis); EMIT2(A_ring);
 		    EMITMBC(0x100) EMITMBC(0x102) EMITMBC(0x104)
 		    EMITMBC(0x1cd) EMITMBC(0x1de) EMITMBC(0x1e0)
 		    EMITMBC(0x1ea2)
@@ -767,9 +880,10 @@
 		    EMIT2('B'); EMITMBC(0x1e02) EMITMBC(0x1e06)
 		    return OK;
 
-	    case 'C': case 0307:
+	    case 'C': case C_cedilla:
 	    CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
-		    EMIT2('C'); EMIT2(0307); EMITMBC(0x106) EMITMBC(0x108)
+		    EMIT2('C');	    EMIT2(C_cedilla);
+		    EMITMBC(0x106) EMITMBC(0x108)
 		    EMITMBC(0x10a) EMITMBC(0x10c)
 		    return OK;
 
@@ -779,11 +893,11 @@
 		    EMITMBC(0x1e0e) EMITMBC(0x1e10)
 		    return OK;
 
-	    case 'E': case 0310: case 0311: case 0312: case 0313:
+	    case 'E': case E_grave: case E_acute: case E_circumflex: case E_diaeresis:
 	    CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
 	    CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
-		    EMIT2('E'); EMIT2(0310); EMIT2(0311); EMIT2(0312);
-		    EMIT2(0313);
+		    EMIT2('E');	EMIT2(E_grave); EMIT2(E_acute);
+		    EMIT2(E_circumflex); EMIT2(E_diaeresis);
 		    EMITMBC(0x112) EMITMBC(0x114) EMITMBC(0x116)
 		    EMITMBC(0x118) EMITMBC(0x11a) EMITMBC(0x1eba)
 		    EMITMBC(0x1ebc)
@@ -807,11 +921,12 @@
 		    EMITMBC(0x1e26) EMITMBC(0x1e28)
 		    return OK;
 
-	    case 'I': case 0314: case 0315: case 0316: case 0317:
+	    case 'I': case I_grave: case I_acute: case I_circumflex: case I_diaeresis:
 	    CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
 	    CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
-		    EMIT2('I'); EMIT2(0314); EMIT2(0315); EMIT2(0316);
-		    EMIT2(0317); EMITMBC(0x128) EMITMBC(0x12a)
+		    EMIT2('I');	    EMIT2(I_grave);    EMIT2(I_acute);
+		    EMIT2(I_circumflex);    EMIT2(I_diaeresis);
+		    EMITMBC(0x128) EMITMBC(0x12a)
 		    EMITMBC(0x12c) EMITMBC(0x12e) EMITMBC(0x130)
 		    EMITMBC(0x1cf) EMITMBC(0x1ec8)
 		    return OK;
@@ -836,19 +951,20 @@
 		    EMIT2('M'); EMITMBC(0x1e3e) EMITMBC(0x1e40)
 		    return OK;
 
-	    case 'N': case 0321:
+	    case 'N': case N_virguilla:
 	    CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
 	    CASEMBC(0x1e48)
-		    EMIT2('N'); EMIT2(0321); EMITMBC(0x143) EMITMBC(0x145)
+		    EMIT2('N');	    EMIT2(N_virguilla);
+		    EMITMBC(0x143) EMITMBC(0x145)
 		    EMITMBC(0x147) EMITMBC(0x1e44) EMITMBC(0x1e48)
 		    return OK;
 
-	    case 'O': case 0322: case 0323: case 0324: case 0325:
-	    case 0326: case 0330:
+	    case 'O': case O_grave: case O_acute: case O_circumflex: case O_virguilla:
+	    case O_diaeresis: case O_slash:
 	    CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
 	    CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
-		    EMIT2('O'); EMIT2(0322); EMIT2(0323); EMIT2(0324);
-		    EMIT2(0325); EMIT2(0326); EMIT2(0330);
+		    EMIT2('O');	 EMIT2(O_grave); EMIT2(O_acute);
+		    EMIT2(O_circumflex); EMIT2(O_virguilla); EMIT2(O_diaeresis); EMIT2(O_slash);
 		    EMITMBC(0x14c) EMITMBC(0x14e) EMITMBC(0x150)
 		    EMITMBC(0x1a0) EMITMBC(0x1d1) EMITMBC(0x1ea)
 		    EMITMBC(0x1ec) EMITMBC(0x1ece)
@@ -876,12 +992,13 @@
 		    EMITMBC(0x1e6a) EMITMBC(0x1e6e)
 		    return OK;
 
-	    case 'U': case 0331: case 0332: case 0333: case 0334:
+	    case 'U': case U_grave: case U_acute: case U_diaeresis: case U_circumflex:
 	    CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
 	    CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
 	    CASEMBC(0x1ee6)
-		    EMIT2('U'); EMIT2(0331); EMIT2(0332); EMIT2(0333);
-		    EMIT2(0334); EMITMBC(0x168) EMITMBC(0x16a)
+		    EMIT2('U');	    EMIT2(U_grave);    EMIT2(U_acute);
+		    EMIT2(U_diaeresis);    EMIT2(U_circumflex);
+		    EMITMBC(0x168) EMITMBC(0x16a)
 		    EMITMBC(0x16c) EMITMBC(0x16e) EMITMBC(0x170)
 		    EMITMBC(0x172) EMITMBC(0x1af) EMITMBC(0x1d3)
 		    EMITMBC(0x1ee6)
@@ -901,10 +1018,11 @@
 		    EMIT2('X'); EMITMBC(0x1e8a) EMITMBC(0x1e8c)
 		    return OK;
 
-	    case 'Y': case 0335:
+	    case 'Y': case Y_acute:
 	    CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
 	    CASEMBC(0x1ef6) CASEMBC(0x1ef8)
-		    EMIT2('Y'); EMIT2(0335); EMITMBC(0x176) EMITMBC(0x178)
+		    EMIT2('Y');	    EMIT2(Y_acute);
+		    EMITMBC(0x176) EMITMBC(0x178)
 		    EMITMBC(0x1e8e) EMITMBC(0x1ef2) EMITMBC(0x1ef6)
 		    EMITMBC(0x1ef8)
 		    return OK;
@@ -915,12 +1033,12 @@
 		    EMITMBC(0x1b5) EMITMBC(0x1e90) EMITMBC(0x1e94)
 		    return OK;
 
-	    case 'a': case 0340: case 0341: case 0342:
-	    case 0343: case 0344: case 0345:
+	    case  'a': case  a_grave: case a_acute: case a_circumflex:
+	    case a_virguilla: case a_diaeresis: case a_ring:
 	    CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
 	    CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
-		    EMIT2('a'); EMIT2(0340); EMIT2(0341); EMIT2(0342);
-		    EMIT2(0343); EMIT2(0344); EMIT2(0345);
+		    EMIT2('a');	EMIT2(a_grave); EMIT2(a_acute); EMIT2(a_circumflex);
+		    EMIT2(a_virguilla); EMIT2(a_diaeresis); EMIT2(a_ring);
 		    EMITMBC(0x101) EMITMBC(0x103) EMITMBC(0x105)
 		    EMITMBC(0x1ce) EMITMBC(0x1df) EMITMBC(0x1e1)
 		    EMITMBC(0x1ea3)
@@ -930,9 +1048,10 @@
 		    EMIT2('b'); EMITMBC(0x1e03) EMITMBC(0x1e07)
 		    return OK;
 
-	    case 'c': case 0347:
+	    case 'c': case c_cedilla:
 	    CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
-		    EMIT2('c'); EMIT2(0347); EMITMBC(0x107) EMITMBC(0x109)
+		    EMIT2('c');	    EMIT2(c_cedilla);
+		    EMITMBC(0x107) EMITMBC(0x109)
 		    EMITMBC(0x10b) EMITMBC(0x10d)
 		    return OK;
 
@@ -942,11 +1061,12 @@
 		    EMITMBC(0x1e0b) EMITMBC(0x1e0f) EMITMBC(0x1e11)
 		    return OK;
 
-	    case 'e': case 0350: case 0351: case 0352: case 0353:
+	    case 'e': case e_grave: case e_acute: case e_circumflex: case e_diaeresis:
 	    CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
 	    CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
-		    EMIT2('e'); EMIT2(0350); EMIT2(0351); EMIT2(0352);
-		    EMIT2(0353); EMITMBC(0x113) EMITMBC(0x115)
+		    EMIT2('e');	    EMIT2(e_grave);    EMIT2(e_acute);
+		    EMIT2(e_circumflex);    EMIT2(e_diaeresis);
+		    EMITMBC(0x113) EMITMBC(0x115)
 		    EMITMBC(0x117) EMITMBC(0x119) EMITMBC(0x11b)
 		    EMITMBC(0x1ebb) EMITMBC(0x1ebd)
 		    return OK;
@@ -969,11 +1089,12 @@
 		    EMITMBC(0x1e27) EMITMBC(0x1e29) EMITMBC(0x1e96)
 		    return OK;
 
-	    case 'i': case 0354: case 0355: case 0356: case 0357:
+	    case 'i': case i_grave: case i_acute: case i_circumflex: case i_diaeresis:
 	    CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
 	    CASEMBC(0x1d0) CASEMBC(0x1ec9)
-		    EMIT2('i'); EMIT2(0354); EMIT2(0355); EMIT2(0356);
-		    EMIT2(0357); EMITMBC(0x129) EMITMBC(0x12b)
+		    EMIT2('i');	    EMIT2(i_grave);    EMIT2(i_acute);
+		    EMIT2(i_circumflex);    EMIT2(i_diaeresis);
+		    EMITMBC(0x129) EMITMBC(0x12b)
 		    EMITMBC(0x12d) EMITMBC(0x12f) EMITMBC(0x1d0)
 		    EMITMBC(0x1ec9)
 		    return OK;
@@ -998,20 +1119,21 @@
 		    EMIT2('m'); EMITMBC(0x1e3f) EMITMBC(0x1e41)
 		    return OK;
 
-	    case 'n': case 0361:
+	    case 'n': case n_virguilla:
 	    CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
 	    CASEMBC(0x1e45) CASEMBC(0x1e49)
-		    EMIT2('n'); EMIT2(0361); EMITMBC(0x144) EMITMBC(0x146)
+		    EMIT2('n');	    EMIT2(n_virguilla);
+		    EMITMBC(0x144) EMITMBC(0x146)
 		    EMITMBC(0x148) EMITMBC(0x149) EMITMBC(0x1e45)
 		    EMITMBC(0x1e49)
 		    return OK;
 
-	    case 'o': case 0362: case 0363: case 0364: case 0365:
-	    case 0366: case 0370:
+	    case 'o': case o_grave: case o_acute: case o_circumflex: case o_virguilla:
+	    case o_diaeresis: case o_slash:
 	    CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
 	    CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
-		    EMIT2('o'); EMIT2(0362); EMIT2(0363); EMIT2(0364);
-		    EMIT2(0365); EMIT2(0366); EMIT2(0370);
+		    EMIT2('o');	    EMIT2(o_grave);    EMIT2(o_acute);
+		    EMIT2(o_circumflex); EMIT2(o_virguilla); EMIT2(o_diaeresis); EMIT2(o_slash);
 		    EMITMBC(0x14d) EMITMBC(0x14f) EMITMBC(0x151)
 		    EMITMBC(0x1a1) EMITMBC(0x1d2) EMITMBC(0x1eb)
 		    EMITMBC(0x1ed) EMITMBC(0x1ecf)
@@ -1039,12 +1161,13 @@
 		    EMITMBC(0x1e6b) EMITMBC(0x1e6f) EMITMBC(0x1e97)
 		    return OK;
 
-	    case 'u': case 0371: case 0372: case 0373: case 0374:
+	    case 'u': case u_grave: case u_acute: case u_circumflex: case u_diaeresis:
 	    CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
 	    CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
 	    CASEMBC(0x1ee7)
-		    EMIT2('u'); EMIT2(0371); EMIT2(0372); EMIT2(0373);
-		    EMIT2(0374); EMITMBC(0x169) EMITMBC(0x16b)
+		    EMIT2('u');	    EMIT2(u_grave);    EMIT2(u_acute);
+		    EMIT2(u_circumflex);    EMIT2(u_diaeresis);
+		    EMITMBC(0x169) EMITMBC(0x16b)
 		    EMITMBC(0x16d) EMITMBC(0x16f) EMITMBC(0x171)
 		    EMITMBC(0x173) EMITMBC(0x1b0) EMITMBC(0x1d4)
 		    EMITMBC(0x1ee7)
@@ -1064,10 +1187,11 @@
 		    EMIT2('x'); EMITMBC(0x1e8b) EMITMBC(0x1e8d)
 		    return OK;
 
-	    case 'y': case 0375: case 0377:
+	    case 'y': case y_acute: case y_diaeresis:
 	    CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
 	    CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
-		    EMIT2('y'); EMIT2(0375); EMIT2(0377); EMITMBC(0x177)
+		    EMIT2('y');	    EMIT2(y_acute);    EMIT2(y_diaeresis);
+		    EMITMBC(0x177)
 		    EMITMBC(0x1e8f) EMITMBC(0x1e99) EMITMBC(0x1ef3)
 		    EMITMBC(0x1ef7) EMITMBC(0x1ef9)
 		    return OK;
