The definition was incorrect. When going from control to printable
name, we need to go from Latin1 -> Native, so that e.g., a 65 gets
turned into the native 'A'
#ifndef EBCDIC
# define toCTRL(c) (toUPPER(c) ^ 64)
#else
-# define toCTRL(c) ((c) == '?' \
- ? LATIN1_TO_NATIVE(0x9F) \
- : (c) == LATIN1_TO_NATIVE(0x9F) \
- ? '?' \
- : (NATIVE_TO_LATIN1(toUPPER(c)) ^ 64))
+# define toCTRL(c) ((isPRINT_A(c)) \
+ ? UNLIKELY((c) == '?') \
+ ? QUESTION_MARK_CTRL \
+ : (NATIVE_TO_LATIN1(toUPPER(c)) ^ 64) \
+ : UNLIKELY((c) == QUESTION_MARK_CTRL) \
+ ? ((c) == '?') \
+ : (LATIN1_TO_NATIVE((c) ^ 64)))
#endif
/* Line numbers are unsigned, 32 bits. */
#error UTF8_MAXBYTES must be at least 12
#endif
+/* ^? is defined to be DEL on ASCII systems. See the definition of toCTRL()
+ * for more */
+#define QUESTION_MARK_CTRL DEL_NATIVE
+
#define MAX_UTF8_TWO_BYTE 0x7FF
#define UTF8_MAXBYTES_CASE UTF8_MAXBYTES
* character occupies 5 bytes, therefore this number is 15 */
#define UTF8_MAXBYTES_CASE 15
+/* ^? is defined to be APC on EBCDIC systems. See the definition of toCTRL()
+ * for more */
+#define QUESTION_MARK_CTRL LATIN1_TO_NATIVE(0x9F)
+
#define MAX_UTF8_TWO_BYTE 0x3FF
/*