.EBCDIC変換 設定ファイル

      EBCDIC ファイルサポートでは特定の内部変換テーブルに加えて、
      ICU/WindowsApi/iconvなど外部のコンバータを使用することが出来ます。
      内部変換テーブルを使用する場合はコマンドラインパラメータの指定により、
      特定のEBCDIC変換を、cfgファイル無しで利用することもできます

      cfg ファイルの場所は ini ファイルで指定します。省略値は ::xeebc.map

            EBCDIC_cfg   ="" #("::xeebc.map")# EBCDIC translation config filename

      ユーティリティ XCV では /MF:mapfile パラメータで指定します。

      ****************************************************************************
      変換パターンが2種あります。
          (a).内部テーブルを使用した日本語の変換。
              コマンドパラメータの指定に加えて変換オプションの指定ができます
              有効なパラメータは SJIS_OPT,SOSI_A2E,SOSI_E2A です。
          (b).ICU ないしはシステム(Windows API, Linux iconv)コンバータを使用した変換。
              ICUには uconv コマンドが、iconv には iconv コマンドが利用でき、
              コンバータのリストは "uconv -l" (ICU) ないし "iconv -l" で得ることができます。
              Windows11ではICUはDefaultで導入されているようですが uconv.exe がありません
              uconv が利用できない場合は "xcv -list -ICU" を試してください。
              Windows コードページ, ICU のコードページは "xcv -List" で出ます。
              尚、Windows コードページ 20290 は 日本語カタカナ拡張となっていますが
              日本語漢字はサポートされていないようです、DBCS が必要な場合は ICU を利用してください。

      オプションパラメータ。

        #####################################################################################

           CONVERTER      : コンバーターの選択
                            0 : 内部テーブルのみで変換する
                                MAP_E2A, MAP_A2E 文字単位で補正可能
                            1 : ICU で変換(ICUの導入が必要)
                            2 : Linuxでは iconv API, Windowsでは WideCharToMultibyte/MultiByteToWideCharで変換。
                              例)
                                 CONVERTER   1           # use ICU converter

        ## 次の ICU_DLL_SUFFIX, ICU_API_SUFFIX は "CONVERTER 1" のとき必要ですが
           xe は システムディレクトリーを調べるので指定は不要かと思いますが、エラーが発生するときは指定してください
           (Windows では c:\Windows\System32 内を、Linux では "uconv --version" で調べます)

           ICU_DLL_SUFFIX : .dllないし、.so ライブラリ名のサフィクス。
                              例)
                                 ICU_DLL_SUFFIX 44
           ICU_API_SUFFIX : ICU API 名のサフィックス。
                              例)
                                 ICU_DLL_SUFFIX _44

        ## 次の ICU_DATAは Windows11では c:\Windows\Globalization\ICU でよければ指定は不要です
           Linux でも "uconv --version" がOKなら必要ないですが、コンバータ Open が失敗する場合に
           libicudata.so.xx を探してそのディレクトリーを指定してください。
           自分で .cnv ファイルを作成して省略値のフォルダー以外においた場合はその場所を指定する必要があります
           環境変数 ICU_DATA に設定してもOKです

           ICU_DATA
                              例)(Linux)   ICU_DATA /system/usr/icu:/data/data/yourcnvs
                                 (Windows) ICU_DATA w:\icu\icu562\icu\bin;w:\icu\icu481\icu\bin

           DBCS_CHARSET   : UCS<-->EBCDIC 変換でDBCS をサポートする文字セットを指定する。
                            この指定がない場合は全SBCS変換になります。
                            "CONVERTER 0" の場合は DBCS_CHARSET ではなく SJIS_OPT で指定してください

                              例)
                                 DBCS_CHARSET cp939     #Japanese
                                 DBCS_CHARSET cp933     #Korean Mixed EBCDIC
                                 DBCS_CHARSET cp935     #Chinese(Simplified) Mixed EBCDIC
                                 DBCS_CHARSET cp937     #Chinese(Traditional)Mixed EBCDIC

           SBCS_CHARSET   : UCS2<-->EBCDIC SBCS 変換文字セットを指定。
                            DBCS_CHARSET を指定した場合は不要。
                            "DefaultMap"を指定すると CP037 の ISO8859-1<-->EBCDIC に相当する内部テーブルを使用。
                            "DefaultMapEuro" は CP1140 相当で ebc-9f が u00a4(Currency Sign) ではなく u-20ac(Euro Sign) に変換します
                            "CONVERTER 0" の場合は DEFAULTMAP/DeafultMapEuro のみ指定でき、この時はDBCS_CHARSETは指定できません
                            "CONVERTER 1" の場合は 9f-->20ac(Euro sign) を定義するコンバーターは
                            cp037 vs cp1140 や cp273 vs cp1141 の様に別途あるの使い分けてください

                              例)
                                 SBCS_CHARSET DefaultMap
                                 SBCS_CHARSET CP1140     #ICU; EBCDIC 037+Euro
                                 SBCS_CHARSET 500        #Windows codepage;IBM EBCDIC International

           LOCAL_CHARSET  : ユニコード<-->PC コードページ コンバーター名。
                            指定のない場合は 環境変数などからコードページが決定される
                            例)
                                LOCAL_CHARSET   437          # Windows codepage
                                LOCAL_CHARSET ISO-8859-1     # Linux, iconv converter

           MAP_E2A/MAP_A2E: SBCS変換の補正をコードポイントごとに指定します。
                            "CONVERTER 0" のときのみ有効です
                            E2A は "CV b2m" に有効ですが "CV m2b" には影響しません
                            E2A の逆を別途 A2E で 指定する必要があります
                              例)
                                 MAP_E2A  0xa0:0xaf
                                 MAP_A2E  0xaf:0xa0
                                 MAP_E2A  0xa1:~      # EBCDIC 0xa1 -> ASCII tilde
                                 MAP_E2A  0xa1:u0101  # Uxxxx format is target of MAP_E2A only
                                 MAP_A2E     ~:0xa1   # EBCDIC 0xa1 <- ASCII tilde

                            SJIS_OPT KANA_EXT/ENG_EXT を使用する場合は E2A で Ascii>0x80 にするときは注意が必要です
                            ShiftJisでは 0x81<-->0x9f,0xe0<-->0xfc、EUC-JP では 0xa1<-->0xfe が 日本語DBCSの
                            1バイト目と定義されているのでB2Mの出力結果をM2BするとSBCSを誤ってDBCSに変換する可能性があります
                            例えば、次の例は ebc-15 と ebc-25 の置換を目的としたと考えられますが
                                MAP_E2A   0x15:0x0a
                                MAP_E2A   0x25:0x85
                                MAP_A2E   0x0a:0x15
                                MAP_A2E   0x85:0x25
                            0x85 はSJISのDBCS第一バイトなので、B2Mの出力 0x85xx が
                            0x85 の次のバイトと組み合わせで日本語DBCSとみなされます

           SUBCHAR_0a     : PCコードページへの変換のとき 0x0a(改行コード)の出力を制御する。
                            パターン (b):外部コンバータ使用 でのみ有効なパラメータ。
                            1 : 0x0a を SBCS 代替文字(の変換)で置換する。
                            0 : 0x0a をそのまま出力する。(省略値)

           SUBCHAR_S2D    : PCコードページへ変換の時、EBCDIC SBCS->マルチバイト変換を許すか。
                            パターン (b):外部コンバータ使用 でのみ有効なパラメータ。
                            例えば cp037 で ebc-a7==>u-00a7 だが cp932 では "CV b2m" で u-00a7==> 0x8198(2桁)
                            となる。"SUBCHAR_S2D 1" とすると u-00a7==> '?' とする。
                            1 : SBCS 代替文字(の変換)で置換する。
                            0 : マルチバイト出力を許す。(省略値)

           SJIS_OPT       : SJIS 変換オプションを指定する。
                            パターン (a):内部テーブル使用 でのみ有効なパラメータ。
                            XCV/CV コマンドでは同じ効果のコマンドラインパラメータがあり、
                            コマンドのパラメータの指定が優先される。

                            ENG_EXT :日本語英小文字拡張(CP939=CP300+CP1027)
                            KANA_EXT:日本語カタカナ拡張(CP930=CP300+CP290)

                            IBM  :EBCDIC 漢字を SJIS-IBM エリアにマッピング (省略値)
                            NEC  :EBCDIC 漢字を SJIS-NEC エリアにマッピング
                            JIS78:SJIS 1978 版
                            JIS83:SJIS 1983 版  (省略値)
                              例)
                                 SJIS_OPT      NEC
                                 SJIS_OPT      JIS78
                                 SJIS_OPT      KANA_EXT

           SOSI_A2E       : DBCS を EBCDIC へ変換する時の SO/SI 設定オプション。
                            XCV/CV/SAVe/REPlace/COPy/... コマンドでは同じ効果のコマンドラインパラメータがあり、
                            コマンドラインパラメータの指定が優先される。
                            省略値は INS。

                            INS  :SO(0xe), SI(0x0f) を 挿入。 出力は伸張します。
                            REP  :DBCS文字列の前後がスペースがあればこれを置換、なければ挿入。
                            SHIFT:REPに加えて挿入による伸張分を後続のスペースの削除で吸収。
                              例)
                                 SOSI_A2E      REP

           SOSI_E2A       : DBCS を EBCDIC から変換する時の SO/SI の取り扱い。
                            XCV/CV/SAVe/REPlace/COPy/...などのコマンドでは同じ効果のコマンドラインパラメータがあり、
                            コマンドラインパラメータの指定が優先される。

                            DEL  :SO/SI を削除。出力行長が短縮になります。
                            REP  :SO/SI を ASCII スペースで置換(省略値)。


      ## サンプルファイル ##

        xeebc.map                                                     ~
        ###########################################################################
        # CONVERTER             1     # 0:Internal Table, 1:ICU, 2:iconv/WindowsAPI||+v124R
        # ICU_DLL_SUFFIX      44      # ICU dllname suffix
        # ICU_API_SUFFIX      _44     # ICU apiname suffix
        # DBCS_CHARSET        cp939   #(Linux)EBCDIC Japanese English lower-case letter extension.~||+v124R
        # SBCS_CHARSET        cp037   #(ICU)EBCDIC-US               ||+v124R
        # SBCS_CHARSET        37      #(Windows)ECDIC-US              ||+v124I
        # SBCS_CHARSET DefaultMapEuro # for "Converter 0"
        # LOCAL_CHARSET    ISO-8859-1 #(Linux)Latin-1                 ||+v124R
        # LOCAL_CHARSET    28591      #(Windows Codepage) for ISO-8859-1||+v124R
        #
        #     SJIS_OPT     ENG_EXT    # ENG_EXT/KANA_EXT
        #     SJIS_OPT     NEC        # IBM/NEX/JIS78/JIS83
        #
        #     MAP_E2A    0xa2: 0x5c   # Yen sign and backslash
        #     MAP_A2E    0x5c: 0xa2   #
        #     MAP_E2A    0xa1: ~      # tilde and upper bar
        #     MAP_A2E       ~: 0xa1   #
        #     MAP_E2A    0xa0: ?      # tilde and upper bar
        #
        #   SOSI_A2E   INS            # INS/REP/SHIFT
        #   SOSI_E2A   DEL            # DEL/REP
        #   SUBCHAR_0a     1          #1/0 replace by SBCS substitution char.
        #   SUBCHAR_S2D    1          #1/0 replace converter output by sub-char when SBCS is translated to pc-DBCS.
        ##################################################################################||~v124R
        #
        ## Use Internal mapping table
        #
        #        CONVERTER          0
        #        SJIS_OPT           KANA_EXT
        #        MAP_E2A            0x15:0x0a
        #
        ## Use ICU , DBCS codepage
        #
        #        CONVERTER          1
        #        DBCS_CHARSET       cp930
        #
        ## Use ICU , SBCS codepage
        #
        #        CONVERTER          1
        #        SBCS_CHARSET       cp037
        #
        ## Use iconv (Linux)
        #
        #        CONVERTER          2
        #        SBCS_CHARSET       cp1047
        #
        ##################################################################################