fill two complete round-trip maps EBCDIC <-> ASCII
This commit is contained in:
parent
1289bc69fb
commit
2482c8b73d
8
sh.h
8
sh.h
@ -175,7 +175,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.823 2017/04/28 02:24:58 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.824 2017/04/28 02:40:25 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R55 2017/04/27"
|
#define MKSH_VERSION "R55 2017/04/27"
|
||||||
|
|
||||||
@ -1470,12 +1470,18 @@ EXTERN char ifs0;
|
|||||||
/* one-way to-ascii-or-high conversion */
|
/* one-way to-ascii-or-high conversion */
|
||||||
#ifdef MKSH_EBCDIC
|
#ifdef MKSH_EBCDIC
|
||||||
EXTERN unsigned short ebcdic_map[256];
|
EXTERN unsigned short ebcdic_map[256];
|
||||||
|
EXTERN unsigned char ebcdic_rtt_toascii[256];
|
||||||
|
EXTERN unsigned char ebcdic_rtt_fromascii[256];
|
||||||
extern void ebcdic_init(void);
|
extern void ebcdic_init(void);
|
||||||
#define asc(c) ((unsigned int)ebcdic_map[(unsigned char)(c)])
|
#define asc(c) ((unsigned int)ebcdic_map[(unsigned char)(c)])
|
||||||
|
#define rtt2asc(c) ebcdic_rtt_toascii[(unsigned char)(c)]
|
||||||
|
#define asc2rtt(c) ebcdic_rtt_fromascii[(unsigned char)(c)]
|
||||||
/* case-independent char comparison */
|
/* case-independent char comparison */
|
||||||
#define ksh_eq(c,u,l) (ord(c) == ord(u) || ord(c) == ord(l))
|
#define ksh_eq(c,u,l) (ord(c) == ord(u) || ord(c) == ord(l))
|
||||||
#else
|
#else
|
||||||
#define asc(c) ord(c)
|
#define asc(c) ord(c)
|
||||||
|
#define rtt2asc(c) ((unsigned char)(c))
|
||||||
|
#define asc2rtt(c) ((unsigned char)(c))
|
||||||
#define ksh_eq(c,u,l) ((ord(c) | 0x20) == ord(l))
|
#define ksh_eq(c,u,l) ((ord(c) | 0x20) == ord(l))
|
||||||
#endif
|
#endif
|
||||||
/* new fast character classes */
|
/* new fast character classes */
|
||||||
|
11
shf.c
11
shf.c
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.86 2017/04/28 01:15:51 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.87 2017/04/28 02:40:26 tg Exp $");
|
||||||
|
|
||||||
/* flags to shf_emptybuf() */
|
/* flags to shf_emptybuf() */
|
||||||
#define EB_READSW 0x01 /* about to switch to reading */
|
#define EB_READSW 0x01 /* about to switch to reading */
|
||||||
@ -1225,18 +1225,19 @@ ebcdic_init(void)
|
|||||||
{
|
{
|
||||||
int i = 256;
|
int i = 256;
|
||||||
unsigned char t;
|
unsigned char t;
|
||||||
char buf[256];
|
|
||||||
|
|
||||||
while (i--)
|
while (i--)
|
||||||
buf[i] = i;
|
ebcdic_rtt_toascii[i] = i;
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
if (__etoa_l(buf, 256) != 256) {
|
if (__etoa_l(ebcdic_rtt_toascii, 256) != 256) {
|
||||||
write(2, "mksh: could not map EBCDIC to ASCII\n", 36);
|
write(2, "mksh: could not map EBCDIC to ASCII\n", 36);
|
||||||
exit(255);
|
exit(255);
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
do {
|
do {
|
||||||
|
/* fill the complete round-trip map */
|
||||||
|
ebcdic_rtt_fromascii[ebcdic_rtt_toascii[i]] = i;
|
||||||
/*
|
/*
|
||||||
* Only use the converted value if it's in the range
|
* Only use the converted value if it's in the range
|
||||||
* [0x00; 0x7F], which I checked; the "extended ASCII"
|
* [0x00; 0x7F], which I checked; the "extended ASCII"
|
||||||
@ -1248,7 +1249,7 @@ ebcdic_init(void)
|
|||||||
* an unsigned int, and or the raw unconverted EBCDIC
|
* an unsigned int, and or the raw unconverted EBCDIC
|
||||||
* values with 0x01000000 instead.
|
* values with 0x01000000 instead.
|
||||||
*/
|
*/
|
||||||
if ((t = (unsigned char)buf[i]) < 0x80U)
|
if ((t = ebcdic_rtt_toascii[i]) < 0x80U)
|
||||||
ebcdic_map[i] = (unsigned short)ord(t);
|
ebcdic_map[i] = (unsigned short)ord(t);
|
||||||
else
|
else
|
||||||
ebcdic_map[i] = (unsigned short)(0x100U | ord(i));
|
ebcdic_map[i] = (unsigned short)(0x100U | ord(i));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user