#if defined(W32) || defined(LNX)

   .EBCDIC変換。

      EBCDIC 変換ではICU/iconvなど外部のコンバータを使用することが出来ます。
      CVコマンド(同梱のXCVコマンドは同等の機能の外部ツールです),xe3270FTPで使用できます。
      変換定義ファイルを用意してください。以下はその説明です。
      (EBCDICファイルの直接編集は"EBCDICファイルサポート"を参照)

      ****************************************************************************
        このファイルは EBCDIC<->PC コードページ 変換パラメータを定義します。
          xeのEBCDICファイルサポート,xe の CV 編集コマンド,xe3270 FTP, XCV ユーティリティーで使用します。
          このファイルの場所は xe3270FTP では xe3270.cfg の CHARSET_CFG パラメータで、
          ユーテリティのXCVコマンドでは /MF:mapfile パラメータで指定します。
          xeのEBCDICファイルサポート,xe の CV 編集コマンドではini ファイルで指定します。省略値は ::xeebc.cfg
            EBCDIC_cfg   ="" #("::xeebc.map")# EBCDIC translation config filename

        変換パターンが3種あります。
          各々のパターンで必要なパラメータは異なり、不要な指定はあっても無視されます。
          (a).内部テーブルを使用した日本語の変換。
              XCV/CVコマンドは関連したオプションパラメータがありそちらが優先されます。
              xe3270FTP では 必要なら このファイルの SJIS_OPTで指定してください。
              有効なパラメータは SJIS_OPT,SOSI_A2E,SOSI_E2A です。
          (b).外部(ICU)ないしはシステム(Windows NLS API, Linux iconv)コンバータを使用した変換。
              ICUは uconv コマンドを、iconv は iconv コマンドを単独で使用することもできます。
              xe3270FTPではこのファイルを使用して変換します。
              XCV/CVコマンドからMAP_A2E/MAP_E2Aを指定したこのファイルを使用して、
              uconv/iconvによる変換を補正することができます。
              文字セットのリストは "uconv -l" (ICU) ないし "iconv -l" で得ることができます。
              Windows コードページ, ICU のコードページは xcv -List で出ます。
              (Windowがサポートするコードページには有効な DBCS EBCDIC コードページは含まれてないようです。
               ICUの導入が必要です)
          (c).指定されたマッピングをs3270+IND$FILE によるuploadの前(MAP_A2F)、downloadの後(MAP_F2A)に
              適用しs3270による変換を補正します。
              MAP_A2F/MAP_F2Aのみが有効なパラメータです。

        3270FTPについて。
          .DBCSユーザーの場合
             IND$FILEはDBCSをサポートしていません。
             (s3270 を --enable-DBCS オプションで make すると画面データは変換されます)
             xe3270は FTP データを 外部/内部コンバータで変換しバイナリーモードで送信/受信します。
             但し、それができるのは固定長データセット/MEMBER だけです。
             可変長データセット/MEMBER は s3270によるSBCS変換に上記(c)の補正ができるだけです

             更にxehosts で DBCS= オプションを指定する必要があります。
             DBCS=CP939 か DBCS=939 を指定すると内部テーブルを使用します。上記のパターン(a)。

             DBCS=OTHER を指定し このファイルの CONVERTER パラメータを 1 とすると、
             外部/システム コンバータを使用します。上記のパターン(b)。
             このファイルのパラメータは以下のタイミングで適用されます。
                ホストへ送信。
                  [PCcode]->{mbrtowc/LOCAL_CHARSET}->[UCS2]->{DBCS_CHARSET/SBCS_CHARSET}->[EBCDIC]
                        ===>(binary mode xfer)===>HOST
                ホストから受信。
                  [PCcode]<-{wcrtomb/LOCAL_CHARSET}<-[UCS2]<-{DBCS_CHARSET/SBCS_CHARSET}<-[EBCDIC]
                        <===(binary mode xfer)<===HOST
             MAP_A2E MAP_E2A SUBCHAR_xxx は SBCSの変換を補正するのに使用されます。
             そこで定義されたコードポイントはコンバータを通さずにマッピングされます。

          .SBCSユーザーの場合
             s3280 は --charset オプションでいくつかの文字セットをサポートしています。
             (サポートされてる文字セットは http://x3270.bgp.nu/s3270-man.html を参照)
             この中に適当な文字セットがあればxe3270の変換機能は不要と思われます。
             もしいくつかのコードポイントでそちらの環境に適合しない場合は
             このファイルの MAP_F2A/MAP_A2F パラメータで補正してください。
             この場合は CONVERTER パラメータは 0 を使用します。上記パターン(c)。
             パラメータは以下のタイミングで適用されます。
                ホストへ送信。
                   [PCcode]->{MAP_A2F}->[PCcode]->(s3270)->[PCcode]===>(IND$FILE)->[EBCDIC]
                ホストから受信。
                   [PCcode]<-{MAP_F2A}<-[PCcode]<-(s3270)<===[PCcode]<-(IND$FILE)<-[EBCDIC]

             固定長データセット/MEMBER に対しては外部/システムコンバータを使用することも出来ます。
             その場合パラメータCONVERTERを 1 に設定し SBCS_CHARSET を指定します。
             パラメータの適用タイミングはDBCS変換に準じますが、SBCS_CHARSETにDEFAULTMAPを
             指定するとコンバーターを使用せず ISO-8859-1<-->CP037に準ずるs3270のテーブルと同じ
             マッピングをします。いずれの場合もMAP_A2E/MAP_E2Aが適用されます。

        固定長レコードについて。
          x3270FTPの場合はDATASETのRECFMが固定長、XCVコマンドの場合は/F[xx][N]コマンドラインオプションを
          指定した(CVコマンドには /F オプションはありません)、その場合PC->EBCDIC変換の時
          長文は分割され短文はLRECLまでスペースパディングされます。
          改行文字は出力されません。
          /F[xx][N]のNオプションは行末8桁が行番号であることの指定です。
          DBCS変換でSO/SIの挿入により伸びた行は行番号欄の前にスペースがあれば
          そのスペースを削除してLRECLを保持しようとします。それが出来ない場合
          行分割されますが N 指定があれば行番号欄は切り捨てられます
          xe3270FTPの場合PROfileコマンドでDATASETのプロファイルをNUMSTDにすることで
          行番号ファイルとなります。
          (DATASETのメンバーを1つどれか /Mnオプションで開き "PRO path save"を入力)

          EBCDIC->PC変換の場合、固定長ファイルはバイナリーモード(改行コード無視)で
          読み込み変換され改行コードを付与して出力されます。

       XCVコマンドの /Mseteol指定で PC<-->EBCDIC変換で改行コードを付与できます。
            /mASCEOL: EBCDIC ファイルの行末コードが Windows:0x0d0a, Linux 0x0a。省略値:0x15。
            /mSETEOL: 出力各行にEOL-IDを追加出力。x2B と レコードモード B2x用。
        尚、固定長LRECL は /F オプションで指定します
            /F[nn][N]:EBCDIC ファイルが固定長。nn:LRECL(省略値=80)。
                      B2x(入力) 又は x2B(出力) EBCDIC ファイルのLRECL。
                      N: 行末8桁が行番号欄。SO/SI挿入で行長を調整する。
                         "N" は m2b でのみ有効。
        例。
         xcv /cm2b ms932 ibm939.txt  /mf:sjisebc.map /F80 /Mseteol /Masceol
             (locale-->ebcdic, output LRECL=80, set ASCII-EOL-ID)
         xcv /cm2b ms932 ibm939.txt /mf:sjisebc.map  /Masceol /Mseteol
             (locale-->ebcdic, output line with appened ASCII-EOL-ID)
         xcv /cb2m ebcf1 ascf2 /mf:sjisebc.map /F80 /Mseteol
             (locale<--ebcdic, input LRECL=80, output line with appened ASCII-EOL-ID)
         xcv /cb2m ebcf1 ascf2 /mf:sjisebc.map /Masceol
             (locale<--ebcdic, input line with ASCII-EOL-ID

       cfg ファイルパラメータ。
        #####################################################################################

        ## 各パラメータの説明 ##


           CONVERTER      : コンバーターの選択
                            0 : MAP_A2F/MAP_F2A パラメータにしたがって全SBCS変換する。
                                MAP_A2F, MAP_F2A 以外は無視される。
                            1 : ICU で変換(ICUの導入が必要)
                            2 : Linuxでは iconv API, Windowsでは WideCharToMultibyte/MultiByteToWideCharで変換。

                            1 と 2 では CHARSET_DBCS, CHARSET_DBCS (LOCAL_CHARSET) パラメータで変換され、
                            MAP_E2A と MAP_A2E がその補正のために使用されます。
                            MAP_A2F と MAP_F2A は無視されます。
                              例)
                                 CONVERTER   1           # apply converter
           ICU_DLL_SUFFIX : .dllないし.so ライブラリ名のサフィクス。
                            "CONVERTER 1" の時 必要。
                            但し省略値のライブラリーを調べる以下のロジックで問題がなければ指定不要です
                                Android版   : /system/lib
                                Linux版     : /usr/local/lib:/usr/lib:$(LD_LIBRARY_PATH)
                                Linux-64版  : /usr/local/lib64:/usr/lib64:$(LD_LIBRARY_PATH)
                                Windows版   : GetSystemDirectory();GetWindowsDirectory();$(PATH)
                                              例えば  GetSystemDirectory() : c:\Windows\system32
                                                      GetWindowsDirectory(): c:\Windows
                              例)
                                 ICU_DLL_SUFFIX 44          # if dllname is icuuc40.dll
           ICU_API_SUFFIX : ICU API 名のサフィックス。
                            "CONVERTER 1" の時 必要。
                            但し省略値のライブラリーを調べるロジックで問題がなければ指定不要です
                            例えば "ucnv_open" の実名は icuuc40.dll では ucnv_open_4_0 になっています。
                              例)
                                 ICU_DLL_SUFFIX _44         # if dllname is icuuc40.dll

             v44 の場合 SUFFIXは以下に定義されています

                $(icu)/source/common/unicode/uvernum.h
                    #define        U_ICU_VERSION_SHORT         "44"
                    #define        U_ICU_ENTRY_POINT_RENAME(x)  x ## _44

           ICU_DATA       : 自分で .cnv ファイルを作成して省略値のフォルダー以外においた場合その場所を指定する
                              例)ICU_DATA=/system/usr/icu:/data/data/yourcnvs
                                 yourcnvsにはicudt__lサブフォルダーを作成しその中にcnvファイルを置いてください

           DBCS_CHARSET   : UCS<-->EBCDIC 変換でDBCS をサポートする文字セットを指定する。
                            (文字セットのリストは "uconv -l" ないし "iconv -l" で得ることができます。)
                            この指定がない場合は全SBCS変換になります。
                            尚、xe3270FTP の場合 この指定を適用するにはxehosts で DBCS=OTHER の指定が必要です。
                              例)
                                 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 変換文字セットを指定。
                            (文字セットのリストは "uconv -l" ないし "iconv -l" で得ることができます。)
                            DBCS_CHARSET 指定の文字セットがSBCS変換を含む場合は指定不要。
                            "DEFAULTMAP"を指定すると ibm37,swaplfnl の ISO8859-1<-->EBCDIC に相当する内部テーブルを使用。
                            ibm37,swaplfnlはs390標準でibm37と異なりEBCDIC-0x25<-->ASCII-0x85, EBCDIC-0x15<-->ASCII<-->0x0aです
                              例)
                                 SBCS_CHARSET CP037          #use external converter
                                 SBCS_CHARSET DEFAULTMAP     #use internal map corresponding to ISO-8859-1 and CP037
                              Windows で CONVERTER=2 の場合
                                 SBCS_CHARSET 1047           #EBCDIC latin
           LOCAL_CHARSET  : UCS2<-->PC コードページコンバーター名。
                            "SBCS_CHARSET DEFAULTMAP"の時は無視される。
                            指定のない場合は 環境変数などからコードページが決定される
                            Axeでは ICU が使用されます
                              例)
                                 LOCAL_CHARSET ISO-8859-1     #
                                 LOCAL_CHARSET CP932          #
                            Windows では Windows コードページ番号を指定する
                                 LOCAL_CHARSET   932          #JP
           MAP_E2A/MAP_A2E: SBCS変換の補正をコードポイントごとに指定します。
                            例えば, 0x7e は iso-8859-1 ではチルダで cp897 では上線です。
                            そして CP1027(EBCDIC) では 0xa0 は上線、0xa1 がチルダです。
                            s3270で CP1027 が使えない場合、"s3270 -charset CP290" とした上で
                            次のようなパラメータ設定が考えられます。
                              例)
                                 MAP_E2A  0xa0: 0xaf   # EBCDIC 0xa0 -> ASCII upper-bar
                                 MAP_E2A  0xa1: ~      # EBCDIC 0xa1 -> ASCII tilde
                                 MAP_A2E  0xaf: 0xa0   # EBCDIC 0xa0 <- ASCII upper-bar
                                 MAP_A2E     ~: 0xa1   # EBCDIC 0xa1 <- ASCII tilde
           MAP_A2F/MAP_F2A: "CONVERTER 0" の時に使用されます。
                            s3270+IND$FILE の変換を補正します。
                            MAP_A2F は ホストへ送信前のファイルに適用、
                            MAP_F2A は ホストから受信後のファイルに適用されます。
                              例)
                                 MAP_A2F  0xaf: ~      # upload 0xaf(upper bar) as 0x7e(tilde)
                                 MAP_F2A  0x1f: .      # convert downloaded 0x1f to printable char
           SUCHAR_SBCS    : 変換不能 SBCS 文字の代替文字。ユニコード値で指定。
                            省略値は U001a.
           SUCHAR_DBCS    : 変換不能 DBCS 文字の代替文字。ユニコード値で指定。
                            省略値は Ufffd.
                            ICU の 文字セット->ユニコード 変換の代替文字は 0x1a と 0xfffd です。
                            文字セット<-ユニコード 変換の代替文字は ICU ソースファイルの
                            各文字セットの xxx.ucm ファイルで定義されています。
                            xe は EBCDIC<->ユニコードとPC文字セット<->ユニコード変換でこれを受け入れます。
                            従って、SUBCHAR_SBCS と SUBCHAR_DBCS は次の場合に利用され、
                            変換不能なコードの代わりにこのユニコードを変換して出力します。
                              LOCAL_CHARSET指定のない場合(ICUではなくwcr2mb/mbrtowc APIを使用)
                              "CONVERTER 2" 指定の場合(システムコンバータを使用)。
                              例)
                                 SUBCHAR_SBCS  0x003f       # "?" for translation err
                                 SUBCHAR_DBCS  0x30fb       # EBCDIC 0x4345 in CP939
                            ICUでない場合は 省略値の Ufffd や U001a の変換も失敗する可能性もあります。
                            その場合は変換もとの値が出力されます。不都合がある場合は
                            SUBCHAR_xxxx を指定してください。
           SUBCHAR_0a     : PCコードページへの変換のとき 0x0a(改行コード)の出力を制御する。
                            1 : 0x0a を SBCS 代替文字(の変換)で置換する。
                            0 : 0x0a をそのまま出力する。(省略値)
           SUBCHAR_S2D    : PCコードページへ変換の時、EBCDIC SBCS->マルチバイト変換を許すか。
                            1 : SBCS 代替文字(の変換)で置換する。
                            0 : マルチバイト出力を許す。(省略値)
           SJIS_OPT       : SJIS 変換オプションを指定する。
                            パターン (a) で有効なパラメータ。(xehostsで DBCS=CP939 か CP930 を指定した場合)
                            XCV/CV コマンドでは同じ効果のコマンドラインパラメータがあり、
                            コマンドラインパラメータの指定が優先される。
                            IBM  :EBCDIC 漢字を SJIS-IBM エリアにマッピング (省略値)
                            NEC  :EBCDIC 漢字を SJIS-NEC エリアにマッピング
                            JIS78:SJIS 1978 版
                            JIS83:SJIS 1983 版  (省略値)
                            ENG_EXT :日本語英小文字拡張(CP939=CP1027)
                            KANA_EXT:日本語カタカナ拡張(CP930=CP290)
                              例)
                                 SJIS_OPT      NEC
                                 SJIS_OPT      JIS78
                                 SJIS_OPT      KANA_EXT
           SOSI_A2E       : DBCS を EBCDIC へ変換する時の SO/SI 設定オプション。
                            XCV/CV コマンドでは同じ効果のコマンドラインパラメータがあり、
                            コマンドラインパラメータの指定が優先される。
                            省略値は xe3270FTP では SHIFT, 以外では INS。

                            INS  :SO(0xe), SI(0x0f) を 挿入。 出力は伸張します。
                            REP  :DBCS文字列の前後がスペースがあればこれを置換、なければ挿入。
                            SHIFT:xe3270のみ、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:s3270 translation, 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
        # DBCS_CHARSET        nnnn    #(Windows)No corresponding Windows Codepage||+v124I
        # SBCS_CHARSET        cp037   #(Linux)EBCDIC-US               ||+v124R
        # SBCS_CHARSET        37      #(Windows)ECDIC-US              ||+v124I
        # SBCS_CHARSET        cp939                                   
        # SBCS_CHARSET        CP037   #Linux                          
        # SBCS_CHARSET        37      #Windows Codepage for CP037(EBCDIC US)
        # LOCAL_CHARSET    ISO-8859-1 #(Linux)Latin-1                 ||+v124R
        # LOCAL_CHARSET    28591      #(Windows Codepage) for ISO-8859-1||+v124R
        #                                                             
        #     MAP_A2F    0xaf: ~      # upload 0xaf(upper bar) as 0x7e(tilde)
        #     MAP_A2F    0x30: 0x31   # upload 0xaf(upper bar) as 0x7e(tilde)
        #     MAP_A2F    0x31: 0x30   # upload 0xaf(upper bar) as 0x7e(tilde)
        #     MAP_F2A    0x1f: .      # convert downloaded 0x1f to printable char
        #     MAP_F2A    0x31: 0x30   # upload 0xaf(upper bar) as 0x7e(tilde)
        #     MAP_F2A    0x30: 0x31   # upload 0xaf(upper bar) as 0x7e(tilde)
        #     MAP_F2A       {: }      # upload 0xaf(upper bar) as 0x7e(tilde)
        #     MAP_F2A       }: {      # upload 0xaf(upper bar) as 0x7e(tilde)
        #                                                             
        #     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           
        #                                                             
        #     MAP_E2A    0x25: ?      # avoid 0x0a generation         
        #     MAP_E2A    0x4a: ?      # Cent, avoid DBCS output by CP939
        #     MAP_E2A    0x5f: ?      # Not , avoid DBCS output by CP939
        #     MAP_E2A    0xb1: ?      # Pond, avoid DBCS output by CP939
        #                                                             
        #     MAP_E2A    0x31: 1      # Pond, avoid DBCS output by CP939
        #     MAP_E2A    0x32: 2      # Pond, avoid DBCS output by CP939
        #     MAP_E2A    0x33: 3      # Pond, avoid DBCS output by CP939
        #                                                             
        #   SOSI_A2E   INS : SOSI setting option when translate DBCS to EBCDIC
        #   SUBCHAR_DBCS    0x30fb                                    
        #   SUBCHAR_SBCS    0x1a                                      
        #   SUBCHAR_0a     1  # replace by SBCS substitution char.    
        #   SUBCHAR_S2D    1  # replace converter output by substitution char when SBCS is translated to pc-codepage DBCS.
        ##################################################################################||~v124R
        #
        ## Use ICU , SBCS codepage
        #
        #        CONVERTER          1
        #        ICU_DLL_SUFFIX    44
        #        ICU_API_SUFFIX   _44
        #        SBCS_CHARSET     cp1047          //EBCDIC Latin/1 Open System(iso-8859-1)
        #
        ## Use ICU , DBCS codepage
        #
        #        CONVERTER          1
        #        ICU_DLL_SUFFIX    44
        #        ICU_API_SUFFIX   _44
        #        DBCS_CHARSET     cp1388          //chinese simplified. superset of cp935
        #
        ## Use API (Windows:MultiByteToWideChar/WideCharToMultibute)
        #
        #        CONVERTER          2
        #        SBCS_CHARSET       20924        //EBCDIC Latin/1 Open System(1047+Euro)
        #
        ## Use API (Linux:iconv)
        #
        #        CONVERTER          2
        #        SBCS_CHARSET       cp1047
        #
        ##################################################################################

#endif