ebcdic.icn: Procedures to convert between ASCII and EBCDIC

link ebcdic
August 14, 1996; Alan Beale
This file is in the public domain.

These procedures assist in use of the ASCII and EBCDIC character sets,
regardless of the native character set of the host:

Ascii128()    Returns a 128-byte string of ASCII characters in
              numerical order.  Ascii128() should be used in
              preference to &ascii for applications which might
              run on an EBCDIC host.

Ascii256()    Returns a 256-byte string representing the 256-
              character ASCII character set.  On an EBCDIC host,
              the order of the second 128 characters is essentially
              arbitrary.

Ebcdic()      Returns a 256-byte string of EBCDIC characters in
              numerical order.

AsciiChar(i)  Returns the character whose ASCII representation is i.

AsciiOrd(c)   Returns the position of the character c in the ASCII
              collating sequence.

EbcdicChar(i) Returns the character whose EBCDIC representation is i.

EbcdicOrd(c)  Returns the position of the character c in the EBCDIC
              collating sequence.

MapEtoA(s)    Maps a string of EBCDIC characters to the equivalent
              ASCII string, according to a plausible mapping.

MapAtoE(s)    Maps a string of ASCII characters to the equivalent
              EBCDIC string, according to a plausible mapping.

Control(c)    Returns the "control character" associated with the
              character c.  On an EBCDIC host, with $ representing
              an EBCDIC character with no 7-bit ASCII equivalent,
              Control("$") may not be identical to "\^$", as
              translated by ICONT (and neither result is particularly
              meaningful).
____________________________________________________________

Notes:

    There is no universally accepted mapping between ASCII and EBCDIC.
    See the SHARE Inc. publication "ASCII and EBCDIC Character Set and
    Code Issues in Systems Application Architecture" for more information
    than you would ever want to have on this subject.

    The mapping of the first 128 characters defined below by Ascii128()
    is the most commonly accepted mapping, even though it probably
    is not exactly like the mapping used by your favorite PC to mainframe
    file transfer utility.  The mapping of the second 128 characters
    is quite arbitrary, except that where an alternate translation of
    ASCII char(n) is popular, this translation is assigned to
    Ascii256()[n+129].

    The behavior of all functions in this package is controlled solely
    by the string literals in the _Eascii() procedure.  Therefore you
    may modify these strings to taste, and still obtain consistent
    results, provided that each character appears exactly once in the
    result of _Eascii().

    Yes, it's really true that the EBCDIC "\n" (NL, char(16r15)) is not
    the same as "\l" (LF, char(16r25)).  How can that be?  "Don't blame
    me, man, I didn't do it."

Source code | Program Library Page | Icon Home Page