Packages

Pure Elixir telecom encodings for Iconvex

Current section

Files

Jump to
Raw

README.md

# Iconvex Telecom
Iconvex Telecom provides pure Elixir telecom encodings through the external-codec
API in [Iconvex](https://hex.pm/packages/iconvex).
Its 61 codecs include every GSM 03.38 national locking and single-shift table.
The package includes ITA alphabets, MTK-2, IA5, Morse, CCIR 476, AIS6,
ARIB Shift-JIS, IBM Six-Bit Transcode, TBCD, and SIM alpha identifiers.
It also includes Murray tape, Wheatstone action tape, Japanese carrier emoji,
and the U.S. Army POW tap-count matrix.
The packed facade supports 53 fixed-width profiles in MSB and LSB order.
Their widths are 3, 5, 6, or 7 bits.
Family helpers preserve CCIR FEC polarity and AIS payload armoring.
Registered GSM codecs use the unpacked SMPP representation.
Each septet occupies one octet, and its high bit is zero.
The separate TPDU packing API accepts the required septet count and UDH alignment.
## Installation
Add both packages to `mix.exs`:
```elixir
def deps do
[
{:iconvex, "~> 0.1.1"},
{:iconvex_telecom, "~> 0.1.1"}
]
end
```
Starting `:iconvex_telecom` registers all 61 named codecs.
One managed transaction installs the complete set.
Its cleanup token survives a supervised Iconvex registry-worker restart.
You can start all feature packages in any order.
The complete registry contains 2,105 unique canonical names.
The generated `../ICONVEX_FULL_STACK_SUPPORT.md` file provides workspace-level integration evidence.
It covers all 2,105 canonical names and GNU libiconv 1.19.
The package artifact does not include this file.
Use the relative path only from the sibling-package source checkout.
[`SURFACE_MANIFEST.tsv`](SURFACE_MANIFEST.tsv) records the package ownership changes.
It covers six registered codecs and two packed profiles from this release.
```elixir
Iconvex.convert("€Ğ", "UTF-8", "GSM0338-TURKISH")
# => {:ok, <<0x04, 0x1B, 0x47>>}
Iconvex.convert(<<0x04, 0x1B, 0x47>>, "GSM0338-TURKISH", "UTF-8")
# => {:ok, "€Ğ"}
Iconvex.convert("HELLO 123", "UTF-8", "ITA2")
# => {:ok, <<20, 1, 18, 18, 24, 4, 27, 23, 19, 1>>}
Iconvex.convert("HELLO 123", "UTF-8", "CCIR476")
# => {:ok, <<0x4B, 0x35, 0x53, 0x53, 0x47, 0x1D, 0x36, 0x3A, 0x72, 0x35>>}
Iconvex.convert("AIS 123?", "UTF-8", "AIS6")
# => {:ok, <<1, 9, 19, 32, 49, 50, 51, 63>>}
Iconvex.convert("ABCd", "UTF-8", "ITA2-S2")
# => {:ok, <<27, 31, 3, 25, 14, 31, 9>>}
Iconvex.convert("ABCD", "UTF-8", "IBM-2780-SIX-BIT-TRANSCODE-GA27-3005-3")
# => {:ok, <<1, 2, 3, 4>>}
Iconvex.convert("あ⛌", "UTF-8", "ARIB-STD-B24-SHIFT-JIS-6.4-E1")
# => {:ok, <<0x82, 0xA0, 0xED, 0x9F>>}
Iconvex.convert(<<0x82, 0xA0, 0xED, 0x9F>>, "ARIB-STD-B24-SHIFT-JIS-6.4-E1", "UTF-8")
# => {:ok, "あ⛌"}
Iconvex.convert("12345", "UTF-8", "TBCD")
# => {:ok, <<0x21, 0x43, 0xF5>>}
Iconvex.convert(<<0x81, 2, 0x08, 0x41, 0x90>>, "SIM-ALPHA", "UTF-8")
# => {:ok, "AА"}
Iconvex.convert("1A", "UTF-8", "MURRAY-1905-FIGURE-7-TAPE")
# => {:ok, <<27, 29, 31, 24>>}
Iconvex.convert(". -", "UTF-8", "WHEATSTONE-1915-HAUSMANN-THREE-KEY-ACTION-TAPE")
# => {:ok, <<0b111, 0b010, 0b110, 0b011>>}
Iconvex.convert("☀", "UTF-8", "UNICODE-17.0.0-EMOJISOURCES-DOCOMO-SHIFT-JIS")
# => {:ok, <<0xF8, 0x9F>>}
Iconvex.convert("CK", "UTF-8", "US-ARMY-GTA-31-70-001-TAP-CODE-PAIR-VALUES")
# => {:ok, <<1, 3, 1, 3>>}
```
The long canonical names define provenance boundaries.
The package does not register Murray as `MURRAY` or `BAUDOT`.
The Wheatstone profile represents physical perforator actions, not framed Morse characters.
The Army profile stores row and column tap counts as two numeric octets.
It does not claim every Tap Code variant.
The three carrier profiles overlay exact `EmojiSources.txt` byte pairs on CP932.
They cover DoCoMo, KDDI, and SoftBank.
Carrier bytes take priority over displaced CP932 PUA mappings.
Other CP932 mappings and canonical inverses do not change.
See [UNICODE17_CARRIER_EMOJI.md](UNICODE17_CARRIER_EMOJI.md).
SIM alpha identifiers use a framing-aware incremental decoder.
Recovery can discard or replace an invalid UCS-2 unit without losing the framing mode.
It does not reinterpret the suffix as GSM or change the callback position.
After an invalid first default-alphabet octet, recovery commits to GSM mode.
It does not treat a later `0x80`, `0x81`, or `0x82` value as a framing header.
One-shot conversion and every lazy Stream split produce the same result.
An earlier invalid UCS-2 unit takes priority over a later odd tail.
A short `0x81` or `0x82` payload reports its empty sequence at physical EOF.
Plain discard retains a valid payload prefix without creating a callback for an absent byte.
Physical compressed-payload errors take priority over a later EOF.
A trailing GSM escape reports its byte when the frame declares more payload.
ETSI TS 102 221 section 8.2 limits a linear fixed record to 255 octets.
The helper and codec APIs reject a 256th physical record byte.
Streaming state counts consumed and pending octets separately.
Their sum cannot exceed 255.
Target state uses the same limit.
`SIMAlphaIdentifier.max_bytes/0` and `SIMAlphaIdentifierCodec.max_bytes/0` expose it.
## Independent national tables
3GPP permits the locking and single-shift tables to name different languages.
The low-level API exposes every one of the 182 valid pairings:
```elixir
alias Iconvex.Telecom.GSM0338
options = [locking: :portuguese, single_shift: :bengali]
GSM0338.decode(<<0x04, 0x1B, 0x19>>, options)
# => {:ok, [0x00EA, 0x09E6]}
GSM0338.encode([0x00EA, 0x09E6], options)
# => {:ok, <<0x04, 0x1B, 0x19>>}
GSM0338.valid_pairs() |> length()
# => 182
```
Locking choices are `:default`, `:turkish`, `:portuguese`, `:bengali`,
`:gujarati`, `:hindi`, `:kannada`, `:malayalam`, `:oriya`, `:punjabi`,
`:tamil`, `:telugu`, and `:urdu`.
Single-shift choices contain the same set plus `:spanish`. Spanish has no
locking table in 3GPP, so `GSM0338-SPANISH` combines the default locking table
with the Spanish single-shift table.
`decode_utf8/2` and `encode_utf8/2` are the fastest direct paths.
`Iconvex.convert/4` calls equivalent codec fast paths automatically.
See [SUPPORTED_ENCODINGS.md](SUPPORTED_ENCODINGS.md),
[SUPPORTED_CODEC_INVENTORY.csv](SUPPORTED_CODEC_INVENTORY.csv),
[CONFORMANCE.md](CONFORMANCE.md), and [BENCHMARKS.md](BENCHMARKS.md).
## Telecom transports
```elixir
alias Iconvex.Telecom.{AIS6, GSM0338.Packing, ITA2, SIMAlphaIdentifier, TBCD}
Packing.pack("hellohello")
# => {:ok, <<0xE8, 0x32, 0x9B, 0xFD, 0x46, 0x97, 0xD9, 0xEC, 0x37>>}
TBCD.encode("12345")
# => {:ok, <<0x21, 0x43, 0xF5>>}
SIMAlphaIdentifier.encode("AА")
# => {:ok, <<0x81, 2, 0x08, 0x41, 0x90>>}
{:ok, ita2_units} = ITA2.encode(~c"HELLO")
ITA2.Packing.pack(ita2_units)
# => {:ok, <<20::5, 1::5, 18::5, 18::5, 24::5>>}
{:ok, ais_units} = AIS6.encode(~c"AIS 123?")
AIS6.Armor.encode(ais_units)
# => {:ok, "19CPijkw"}
{:ok, gsm_packed} =
Iconvex.Telecom.Packed.encode_from_utf8("hellohello", "GSM0338")
Base.encode16(gsm_packed.data)
# => "E8329BFD4697D9EC37"
Iconvex.Telecom.Packed.decode_to_utf8(gsm_packed, "GSM0338")
# => {:ok, "hellohello"}
```
`Iconvex.Telecom.Packed.profiles/0` returns the exact runtime list.
Each profile accepts `:standard`, `:msb`, or `:lsb`.
`SUPPORTED_PACKED_CODEC_INVENTORY.csv` records the standard order.
The facade caches immutable metadata in `persistent_term`.
Runtime calls do not rebuild the 53-profile catalog.
IBM Transcode defaults to its documented low-order-first transport.
The same facade also accepts the explicit MSB name.
A `-PACKED-MSB` or `-PACKED-LSB` suffix selects its named order.
An explicit conflicting order returns `{:error, :bit_order_mismatch}`.
A non-LSB tag on an LSB transport returns the same error.
Packed decode failures report physical bit offsets.
They do not report offsets in the temporary unpacked buffer.
MSB fragments retain their exact bit width.
LSB fragments use the failing unit integer.
These rules match the Core packed transport contracts.
## License
The original library code uses `LGPL-2.1-or-later`, matching GNU libiconv.
Imported Android/Apache and Unicode fixtures retain upstream licenses.
Public-domain historical publications and U.S. government source evidence keep
their attribution and package-boundary notes.
See `LICENSE.APACHE-2.0`, `LICENSE.UNICODE`, `SOURCE_PROVENANCE.md`, and `NOTICE`.
<!-- iconvex-codec-catalog:start -->
## Complete codec catalog
The generator builds this table from the release inventories.
Do not edit this section by hand.
Codec names ignore ASCII letter case.
You can use each alias to look up its codec.
Aliases do not increase the canonical codec count.
**61 canonical codecs · 129 aliases · 190 accepted names.**
### Registered codec names
| Canonical codec | Accepted aliases | Stateful |
|---|---|:---:|
| `AIS6` | `AIS-6-BIT`<br>`AIS-6BIT`<br>`AIS-6BIT-ASCII`<br>`ITU-R-M.1371`<br>`ITU-R-M.1371-6` | No |
| `ARIB-STD-B24-SHIFT-JIS-6.4-E1` || No |
| `CCIR476` | `CCIR-476`<br>`CCIR_476`<br>`ITU-R-M.476-5`<br>`NAVTEX`<br>`SITOR`<br>`SITOR-B` | Yes |
| `GSM0338` | `GSM-03.38`<br>`GSM-03.38-2009`<br>`GSM-7`<br>`GSM7`<br>`SMPP-GSM7` | Yes |
| `GSM0338-BENGALI` | `GSM-03.38-BENGALI` | Yes |
| `GSM0338-GUJARATI` | `GSM-03.38-GUJARATI` | Yes |
| `GSM0338-HINDI` | `GSM-03.38-HINDI` | Yes |
| `GSM0338-KANNADA` | `GSM-03.38-KANNADA` | Yes |
| `GSM0338-LOCKING-BENGALI` | `GSM-03.38-LOCKING-BENGALI` | Yes |
| `GSM0338-LOCKING-GUJARATI` | `GSM-03.38-LOCKING-GUJARATI` | Yes |
| `GSM0338-LOCKING-HINDI` | `GSM-03.38-LOCKING-HINDI` | Yes |
| `GSM0338-LOCKING-KANNADA` | `GSM-03.38-LOCKING-KANNADA` | Yes |
| `GSM0338-LOCKING-MALAYALAM` | `GSM-03.38-LOCKING-MALAYALAM` | Yes |
| `GSM0338-LOCKING-ORIYA` | `GSM-03.38-LOCKING-ORIYA` | Yes |
| `GSM0338-LOCKING-PORTUGUESE` | `GSM-03.38-LOCKING-PORTUGUESE` | Yes |
| `GSM0338-LOCKING-PUNJABI` | `GSM-03.38-LOCKING-PUNJABI` | Yes |
| `GSM0338-LOCKING-TAMIL` | `GSM-03.38-LOCKING-TAMIL` | Yes |
| `GSM0338-LOCKING-TELUGU` | `GSM-03.38-LOCKING-TELUGU` | Yes |
| `GSM0338-LOCKING-TURKISH` | `GSM-03.38-LOCKING-TURKISH` | Yes |
| `GSM0338-LOCKING-URDU` | `GSM-03.38-LOCKING-URDU` | Yes |
| `GSM0338-MALAYALAM` | `GSM-03.38-MALAYALAM` | Yes |
| `GSM0338-ORIYA` | `GSM-03.38-ORIYA` | Yes |
| `GSM0338-PORTUGUESE` | `GSM-03.38-PORTUGUESE` | Yes |
| `GSM0338-PUNJABI` | `GSM-03.38-PUNJABI` | Yes |
| `GSM0338-SINGLE-BENGALI` | `GSM-03.38-SINGLE-BENGALI` | Yes |
| `GSM0338-SINGLE-GUJARATI` | `GSM-03.38-SINGLE-GUJARATI` | Yes |
| `GSM0338-SINGLE-HINDI` | `GSM-03.38-SINGLE-HINDI` | Yes |
| `GSM0338-SINGLE-KANNADA` | `GSM-03.38-SINGLE-KANNADA` | Yes |
| `GSM0338-SINGLE-MALAYALAM` | `GSM-03.38-SINGLE-MALAYALAM` | Yes |
| `GSM0338-SINGLE-ORIYA` | `GSM-03.38-SINGLE-ORIYA` | Yes |
| `GSM0338-SINGLE-PORTUGUESE` | `GSM-03.38-SINGLE-PORTUGUESE` | Yes |
| `GSM0338-SINGLE-PUNJABI` | `GSM-03.38-SINGLE-PUNJABI` | Yes |
| `GSM0338-SINGLE-SPANISH` | `GSM-03.38-SINGLE-SPANISH` | Yes |
| `GSM0338-SINGLE-TAMIL` | `GSM-03.38-SINGLE-TAMIL` | Yes |
| `GSM0338-SINGLE-TELUGU` | `GSM-03.38-SINGLE-TELUGU` | Yes |
| `GSM0338-SINGLE-TURKISH` | `GSM-03.38-SINGLE-TURKISH` | Yes |
| `GSM0338-SINGLE-URDU` | `GSM-03.38-SINGLE-URDU` | Yes |
| `GSM0338-SPANISH` | `GSM-03.38-SPANISH` | Yes |
| `GSM0338-TAMIL` | `GSM-03.38-TAMIL` | Yes |
| `GSM0338-TELUGU` | `GSM-03.38-TELUGU` | Yes |
| `GSM0338-TURKISH` | `GSM-03.38-TURKISH` | Yes |
| `GSM0338-URDU` | `GSM-03.38-URDU` | Yes |
| `IBM-2780-SIX-BIT-TRANSCODE-GA27-3005-3` | `IBM-2780-SIX-BIT-TRANSCODE-1971`<br>`IBM-2780-TRANSCODE-1971`<br>`IBM-GA27-3005-3-TRANSCODE` | No |
| `IBM-BSC-SIX-BIT-TRANSCODE-GA27-3004-2` | `IBM-BSC-SIX-BIT-TRANSCODE-1970`<br>`IBM-GA27-3004-2-TRANSCODE` | No |
| `ITA1` | `BAUDOT-CODE-ITA1`<br>`BAUDOT-ORIGINAL`<br>`CCITT-1`<br>`CCITT-NO-1`<br>`CCITT1`<br>`INTERNATIONAL-TELEGRAPH-ALPHABET-NO-1`<br>`ITA-1` | Yes |
| `ITA2` | `BAUDOT`<br>`BAUDOT-CODE`<br>`CCITT-2`<br>`CCITT-NO-2`<br>`CCITT2`<br>`INTERNATIONAL-TELEGRAPH-ALPHABET-NO-2`<br>`ITA-2` | Yes |
| `ITA2-S2` | `CASE-PRESERVING-ITA2`<br>`CCITT-S.2`<br>`ITA-2-S2`<br>`ITA2-S.2`<br>`ITU-T-S.2` | Yes |
| `ITA2-US-TTY` | `AMERICAN-TELETYPEWRITER-CODE`<br>`US-BAUDOT`<br>`US-TTY`<br>`USTTY` | Yes |
| `ITA3` | `CCITT-3`<br>`CCITT-NO-3`<br>`INTERNATIONAL-TELEGRAPH-ALPHABET-NO-3`<br>`ITA-3`<br>`ITU-T-S.13` | Yes |
| `ITA4` | `CCITT-4`<br>`CCITT-NO-4`<br>`INTERNATIONAL-TELEGRAPH-ALPHABET-NO-4`<br>`ITA-4`<br>`ITU-T-R.44` | Yes |
| `ITU-T-T.50-IRV` | `CCITT-5`<br>`CCITT-NO-5`<br>`CCITT5`<br>`IA5`<br>`INTERNATIONAL-ALPHABET-NO-5`<br>`INTERNATIONAL-REFERENCE-ALPHABET`<br>`INTERNATIONAL-TELEGRAPH-ALPHABET-NO-5`<br>`IRA`<br>`ISO-646-IRV:1991`<br>`ITA-5`<br>`ITA5`<br>`ITU-T-T.50`<br>`RECOMMENDATION-V.3-IA5`<br>`T.50-IRV`<br>`T50-IRV` | No |
| `MORSE-ITU-M1677` | `INTERNATIONAL-MORSE`<br>`INTERNATIONAL-MORSE-CODE`<br>`ITU-R-M.1677`<br>`ITU-R-M.1677-1`<br>`MORSE-CODE` | No |
| `MTK-2` | `CYRILLIC-ITA2`<br>`MKT-2`<br>`RUSSIAN-BAUDOT`<br>`RUSSIAN-ITA2` | Yes |
| `MURRAY-1905-FIGURE-7-TAPE` || Yes |
| `SIM-ALPHA-IDENTIFIER` | `SIM-ALPHA`<br>`SIM-UCS2-80-81-82`<br>`USIM-ALPHA`<br>`USIM-ALPHA-IDENTIFIER` | Yes |
| `TBCD` | `3GPP-TBCD`<br>`GSM-TBCD`<br>`TELEPHONY-BCD` | No |
| `UNICODE-17.0.0-EMOJISOURCES-DOCOMO-SHIFT-JIS` | `DOCOMO-SHIFT-JIS-EMOJI-UNICODE-17.0.0` | No |
| `UNICODE-17.0.0-EMOJISOURCES-KDDI-SHIFT-JIS` | `KDDI-SHIFT-JIS-EMOJI-UNICODE-17.0.0` | No |
| `UNICODE-17.0.0-EMOJISOURCES-SOFTBANK-SHIFT-JIS` | `SOFTBANK-SHIFT-JIS-EMOJI-UNICODE-17.0.0` | No |
| `US-ARMY-GTA-31-70-001-TAP-CODE-PAIR-VALUES` | `GTA-31-70-001-TAP-CODE-PAIR-VALUES`<br>`POW-TAP-CODE-5X5-PAIR-VALUES`<br>`US-ARMY-POW-TAP-CODE-PAIR-VALUES` | No |
| `WHEATSTONE-1915-HAUSMANN-THREE-KEY-ACTION-TAPE` || No |
### Packed transport profiles
**53 base codec profiles · 106 explicit packed names.**
These profiles change the bit transport only.
They do not add registered Unicode mappings.
| Base codec | Unit bits | Standard order | Explicit packed names |
|---|---:|:---:|---|
| `AIS6` | 6 | MSB | `AIS6-PACKED-MSB`<br>`AIS6-PACKED-LSB` |
| `CCIR476` | 7 | LSB | `CCIR476-PACKED-MSB`<br>`CCIR476-PACKED-LSB` |
| `GSM0338` | 7 | LSB | `GSM0338-PACKED-MSB`<br>`GSM0338-PACKED-LSB` |
| `GSM0338-BENGALI` | 7 | LSB | `GSM0338-BENGALI-PACKED-MSB`<br>`GSM0338-BENGALI-PACKED-LSB` |
| `GSM0338-GUJARATI` | 7 | LSB | `GSM0338-GUJARATI-PACKED-MSB`<br>`GSM0338-GUJARATI-PACKED-LSB` |
| `GSM0338-HINDI` | 7 | LSB | `GSM0338-HINDI-PACKED-MSB`<br>`GSM0338-HINDI-PACKED-LSB` |
| `GSM0338-KANNADA` | 7 | LSB | `GSM0338-KANNADA-PACKED-MSB`<br>`GSM0338-KANNADA-PACKED-LSB` |
| `GSM0338-LOCKING-BENGALI` | 7 | LSB | `GSM0338-LOCKING-BENGALI-PACKED-MSB`<br>`GSM0338-LOCKING-BENGALI-PACKED-LSB` |
| `GSM0338-LOCKING-GUJARATI` | 7 | LSB | `GSM0338-LOCKING-GUJARATI-PACKED-MSB`<br>`GSM0338-LOCKING-GUJARATI-PACKED-LSB` |
| `GSM0338-LOCKING-HINDI` | 7 | LSB | `GSM0338-LOCKING-HINDI-PACKED-MSB`<br>`GSM0338-LOCKING-HINDI-PACKED-LSB` |
| `GSM0338-LOCKING-KANNADA` | 7 | LSB | `GSM0338-LOCKING-KANNADA-PACKED-MSB`<br>`GSM0338-LOCKING-KANNADA-PACKED-LSB` |
| `GSM0338-LOCKING-MALAYALAM` | 7 | LSB | `GSM0338-LOCKING-MALAYALAM-PACKED-MSB`<br>`GSM0338-LOCKING-MALAYALAM-PACKED-LSB` |
| `GSM0338-LOCKING-ORIYA` | 7 | LSB | `GSM0338-LOCKING-ORIYA-PACKED-MSB`<br>`GSM0338-LOCKING-ORIYA-PACKED-LSB` |
| `GSM0338-LOCKING-PORTUGUESE` | 7 | LSB | `GSM0338-LOCKING-PORTUGUESE-PACKED-MSB`<br>`GSM0338-LOCKING-PORTUGUESE-PACKED-LSB` |
| `GSM0338-LOCKING-PUNJABI` | 7 | LSB | `GSM0338-LOCKING-PUNJABI-PACKED-MSB`<br>`GSM0338-LOCKING-PUNJABI-PACKED-LSB` |
| `GSM0338-LOCKING-TAMIL` | 7 | LSB | `GSM0338-LOCKING-TAMIL-PACKED-MSB`<br>`GSM0338-LOCKING-TAMIL-PACKED-LSB` |
| `GSM0338-LOCKING-TELUGU` | 7 | LSB | `GSM0338-LOCKING-TELUGU-PACKED-MSB`<br>`GSM0338-LOCKING-TELUGU-PACKED-LSB` |
| `GSM0338-LOCKING-TURKISH` | 7 | LSB | `GSM0338-LOCKING-TURKISH-PACKED-MSB`<br>`GSM0338-LOCKING-TURKISH-PACKED-LSB` |
| `GSM0338-LOCKING-URDU` | 7 | LSB | `GSM0338-LOCKING-URDU-PACKED-MSB`<br>`GSM0338-LOCKING-URDU-PACKED-LSB` |
| `GSM0338-MALAYALAM` | 7 | LSB | `GSM0338-MALAYALAM-PACKED-MSB`<br>`GSM0338-MALAYALAM-PACKED-LSB` |
| `GSM0338-ORIYA` | 7 | LSB | `GSM0338-ORIYA-PACKED-MSB`<br>`GSM0338-ORIYA-PACKED-LSB` |
| `GSM0338-PORTUGUESE` | 7 | LSB | `GSM0338-PORTUGUESE-PACKED-MSB`<br>`GSM0338-PORTUGUESE-PACKED-LSB` |
| `GSM0338-PUNJABI` | 7 | LSB | `GSM0338-PUNJABI-PACKED-MSB`<br>`GSM0338-PUNJABI-PACKED-LSB` |
| `GSM0338-SINGLE-BENGALI` | 7 | LSB | `GSM0338-SINGLE-BENGALI-PACKED-MSB`<br>`GSM0338-SINGLE-BENGALI-PACKED-LSB` |
| `GSM0338-SINGLE-GUJARATI` | 7 | LSB | `GSM0338-SINGLE-GUJARATI-PACKED-MSB`<br>`GSM0338-SINGLE-GUJARATI-PACKED-LSB` |
| `GSM0338-SINGLE-HINDI` | 7 | LSB | `GSM0338-SINGLE-HINDI-PACKED-MSB`<br>`GSM0338-SINGLE-HINDI-PACKED-LSB` |
| `GSM0338-SINGLE-KANNADA` | 7 | LSB | `GSM0338-SINGLE-KANNADA-PACKED-MSB`<br>`GSM0338-SINGLE-KANNADA-PACKED-LSB` |
| `GSM0338-SINGLE-MALAYALAM` | 7 | LSB | `GSM0338-SINGLE-MALAYALAM-PACKED-MSB`<br>`GSM0338-SINGLE-MALAYALAM-PACKED-LSB` |
| `GSM0338-SINGLE-ORIYA` | 7 | LSB | `GSM0338-SINGLE-ORIYA-PACKED-MSB`<br>`GSM0338-SINGLE-ORIYA-PACKED-LSB` |
| `GSM0338-SINGLE-PORTUGUESE` | 7 | LSB | `GSM0338-SINGLE-PORTUGUESE-PACKED-MSB`<br>`GSM0338-SINGLE-PORTUGUESE-PACKED-LSB` |
| `GSM0338-SINGLE-PUNJABI` | 7 | LSB | `GSM0338-SINGLE-PUNJABI-PACKED-MSB`<br>`GSM0338-SINGLE-PUNJABI-PACKED-LSB` |
| `GSM0338-SINGLE-SPANISH` | 7 | LSB | `GSM0338-SINGLE-SPANISH-PACKED-MSB`<br>`GSM0338-SINGLE-SPANISH-PACKED-LSB` |
| `GSM0338-SINGLE-TAMIL` | 7 | LSB | `GSM0338-SINGLE-TAMIL-PACKED-MSB`<br>`GSM0338-SINGLE-TAMIL-PACKED-LSB` |
| `GSM0338-SINGLE-TELUGU` | 7 | LSB | `GSM0338-SINGLE-TELUGU-PACKED-MSB`<br>`GSM0338-SINGLE-TELUGU-PACKED-LSB` |
| `GSM0338-SINGLE-TURKISH` | 7 | LSB | `GSM0338-SINGLE-TURKISH-PACKED-MSB`<br>`GSM0338-SINGLE-TURKISH-PACKED-LSB` |
| `GSM0338-SINGLE-URDU` | 7 | LSB | `GSM0338-SINGLE-URDU-PACKED-MSB`<br>`GSM0338-SINGLE-URDU-PACKED-LSB` |
| `GSM0338-SPANISH` | 7 | LSB | `GSM0338-SPANISH-PACKED-MSB`<br>`GSM0338-SPANISH-PACKED-LSB` |
| `GSM0338-TAMIL` | 7 | LSB | `GSM0338-TAMIL-PACKED-MSB`<br>`GSM0338-TAMIL-PACKED-LSB` |
| `GSM0338-TELUGU` | 7 | LSB | `GSM0338-TELUGU-PACKED-MSB`<br>`GSM0338-TELUGU-PACKED-LSB` |
| `GSM0338-TURKISH` | 7 | LSB | `GSM0338-TURKISH-PACKED-MSB`<br>`GSM0338-TURKISH-PACKED-LSB` |
| `GSM0338-URDU` | 7 | LSB | `GSM0338-URDU-PACKED-MSB`<br>`GSM0338-URDU-PACKED-LSB` |
| `IBM-2780-SIX-BIT-TRANSCODE-GA27-3005-3` | 6 | LSB | `IBM-2780-SIX-BIT-TRANSCODE-GA27-3005-3-PACKED-MSB`<br>`IBM-2780-SIX-BIT-TRANSCODE-GA27-3005-3-PACKED-LSB` |
| `IBM-BSC-SIX-BIT-TRANSCODE-GA27-3004-2` | 6 | LSB | `IBM-BSC-SIX-BIT-TRANSCODE-GA27-3004-2-PACKED-MSB`<br>`IBM-BSC-SIX-BIT-TRANSCODE-GA27-3004-2-PACKED-LSB` |
| `ITA1` | 5 | LSB | `ITA1-PACKED-MSB`<br>`ITA1-PACKED-LSB` |
| `ITA2` | 5 | LSB | `ITA2-PACKED-MSB`<br>`ITA2-PACKED-LSB` |
| `ITA2-S2` | 5 | LSB | `ITA2-S2-PACKED-MSB`<br>`ITA2-S2-PACKED-LSB` |
| `ITA2-US-TTY` | 5 | LSB | `ITA2-US-TTY-PACKED-MSB`<br>`ITA2-US-TTY-PACKED-LSB` |
| `ITA3` | 7 | LSB | `ITA3-PACKED-MSB`<br>`ITA3-PACKED-LSB` |
| `ITA4` | 6 | LSB | `ITA4-PACKED-MSB`<br>`ITA4-PACKED-LSB` |
| `ITU-T-T.50-IRV` | 7 | MSB | `ITU-T-T.50-IRV-PACKED-MSB`<br>`ITU-T-T.50-IRV-PACKED-LSB` |
| `MTK-2` | 5 | LSB | `MTK-2-PACKED-MSB`<br>`MTK-2-PACKED-LSB` |
| `MURRAY-1905-FIGURE-7-TAPE` | 5 | MSB | `MURRAY-1905-FIGURE-7-TAPE-PACKED-MSB`<br>`MURRAY-1905-FIGURE-7-TAPE-PACKED-LSB` |
| `WHEATSTONE-1915-HAUSMANN-THREE-KEY-ACTION-TAPE` | 3 | MSB | `WHEATSTONE-1915-HAUSMANN-THREE-KEY-ACTION-TAPE-PACKED-MSB`<br>`WHEATSTONE-1915-HAUSMANN-THREE-KEY-ACTION-TAPE-PACKED-LSB` |
<!-- iconvex-codec-catalog:end -->