uCosminexus Interschema ユーザーズガイド

[目次][用語][索引][前へ][次へ]

付録D.3 ETtransExec(トランスレータの起動)

形式
#include  "ETtrans.h"
 
int  ETtransExec(char  *c, ETTRANSADRSLIST  *pAdrsList,
                 char  *pszLogFile, char  *pszOptList,
                 int  iFileAppendFlag,  int  iFNFlag,
                 ETTRANSERRLIST  *pErrList)

引数
引数 種別 内容
c 入力 システムの管理情報が格納されているアドレス(ETtransInit関数の引数cで取得したアドレス)を指定します。
pAdrsList 入力 入出力データ差し替え情報の配列を指定します。
pszLogFile 入力 ログファイル名を指定します。
pszOptList 入力 コマンドラインで指定できる実行時オプションを指定します。
オプションの詳細については,「5.4.1(3) 引数」を参照してください。
iFileAppendFlag 入力 ファイルの出力方法を指定します。
  • ET_FA_UPDATE:新規又は上書き
  • ET_FA_APPEND:追加書き
iFNFlag 入力 MDL内のフォーマットのうち,変換対象とするフォーマットを特定するかどうかを指定します。
  • ET_OP_FNOFF:指定なし
  • ET_OP_FNON:指定あり
pErrList 出力 エラー情報リストの出力先を指定します。

説明
引数pszOptListに指定したオプションでトランスレータを起動し,ETtransLoadMap関数でロードしたMDLファイルに定義されている内容に従ってデータを変換します。
MDLファイルがロードされていない状態でこの関数を実行するとエラーとなります。
引数pAdrsListは,MDLファイル内に定義した入出力ファイルを別ファイル又はメモリデータに差し替える場合に指定します。この引数でデータを差し替えるフォーマット名と,対応するデータのファイル名,又はメモリアドレスを指定します。データを差し替えるフォーマット名は複数指定できます。また,差し替え対象となるフォーマットの終了を示すために,ETTRANSADRSLIST配列の最後の要素のFormatNameメンバをNULLにする必要があります。
データの差し替えを指定されたフォーマットに対しては,MDLファイル内で定義された入出力データファイル名は無視されます。入力データと出力データのファイルは,同じファイル名を指定するとエラーとなります。また,MDLファイル内で定義された入出力データファイル名と同じファイル名を指定した場合もエラーとなるので注意してください。
構造体ETTRANSADRSLISTは,ヘッダファイルETtrans.h内で定義されています。ETtrans.hの内容を次に示します。
typedef struct {
  char *FormatName;  /* 差し替え対象となるフォーマット名 */
  int  DataKind;     /* データ種別(ET_DK_*)*/
  char *DataAddress; /* 入出力データファイル名(ファイル指定)*/
                    /* 入出力データの開始アドレス(メモリ指定)*/
  char *EndAddress; /* 入出力データの終了アドレス(メモリ指定)*/
  int  MemoryInitSize; /* 出力データエリア初期サイズ
                                           (メモリ指定)*/
  int  MemoryIncrementSize; /* 出力データエリア増分サイズ
                                           (メモリ指定)*/
} ETTRANSADRSLIST;
データ種別DataKindには,ヘッダファイルETtrans.h内で定義されている次の値のどれかを指定します。
  • ET_DK_FILE:データ種別がファイルの場合
  • ET_DK_MEMORY:データ種別がメモリの場合
ET_DK_MEMORYを指定した場合は,入出力データの開始アドレスDataAddressと終了アドレスEndAddressを指定してください。ただし,出力フォーマットの場合だけ,開始アドレスとしてNULLアドレスを指定できます。この場合,トランスレータが必要なデータエリアを確保し,その先頭アドレスを入出力データの開始アドレスDataAddressへ設定して返します。トランスレータが確保したエリアは,次回のETtransExecの実行,又はETtransEndの実行前まで有効です。確保するデータエリアサイズは,pAdrsListのMemoryInitSize,又はMemoryIncrementSizeで指定します。pAdrsListの該当する値に0が指定された場合は,システム情報ファイルettrans.ini内の[MemoryData]セクションで定義された値を用います。pAdrsList,システム情報ファイルの両方に定義がない場合は,初期割り当てサイズと割り当て増分サイズの両方に1,024(バイト)を仮定します。
出力フォーマットに対しては,入出力データの終了アドレスEndAddressにデータ最終アドレスを返します。ただし,出力データが指定されたアドレスを超えてエラーのために未出力になる場合は,ヘッダファイル「ETtrans.h」で定義されている次の値を設定して返します。
  • ET_AD_OVER:メモリアドレスオーバー
  • ET_AD_NOTOUT:未出力
ログファイル名pszLogFileは,ETtransInit関数で指定したファイルとは別のファイルに出力する場合に指定します。この引数にNULLを指定した場合,又は指定したファイルを作成又は更新できない場合は,ETtransInit関数で指定したファイルに出力します。ただし,システム情報ファイルの[Option]セクションでログ出力の抑止が指定されている場合は,pszLogFile指定に関係なく,ログを出力しません。
変換対象指定iFileAppendFlagは,変換結果をファイルに出力する場合に有効になります(XML文書の出力を除きます)。ヘッダファイルETtrans.h内で定義されている次の値を指定します。
  • ET_FA_UPDATE:新規又は上書き
  • ET_FA_APPEND:追加書き
変換対象フォーマット指定iFNFlagにET_OP_FNOFFを指定した場合は,対象となるMDLファイル内すべてのフォーマットを変換します。ET_OP_FNONを指定した場合は,差し替え情報pAdrsListで指定されたフォーマットだけを変換します(コマンド実行時に-FNオプションを指定した場合と同じです)。
エラー情報リストpErrListへは変換実行時のエラー情報を出力します。エラー情報がない場合は,エラー情報リストpErrListのデータ数に0を返します。取り出した内容は,次回のEttransExecの実行,又はETtransEndの実行前まで有効です。構造体ETTRANSERRLISTは,ヘッダファイルETtrans.h内で定義されています。
typedef struct {
    int  Size;                 /* エラー情報データ数 */
    ETTRANSERRDATA  *ErrData;  /* エラー情報データ (配列) */
} ETTRANSERRLIST;
 
typedef struct {
    int  MessageNo;            /* メッセージ番号 */
    int  ErrorLevel;           /* エラーレベル */
    int  NumericData;          /* 数値情報 */
    char  *Information;        /* 文字列情報 */
} ETTRANSERRDATA;
各エラー情報のデータは,変換処理で発生したワーニングレベル以上のエラー情報が発生順に設定されます。エラーレベルは,トランスレータの戻り値と同じ意味を持ちます。数値情報と文字列情報は,ログファイルへ出力する付加情報で,次の内容を出力します。付加情報がない場合は,数値情報は0,文字列情報はNULLが設定されます。

表D-2 ログファイルに出力される数値情報,文字情報の内容

メッセージ番号 数値情報 文字列情報 備考
9 出力済みのグループ数 なし グループ単位出力指定がある場合のエラー
55,56 出口関数の戻り値 ユーザ組み込み関数名 出口関数のエラー
7,8,23〜36,50,57,67,78 コンポーネントのアドレス コンポーネント名 コンポーネントに対するエラー
21 0 オプション オプション不正のエラー
1 フォーマット名
2 なし(メモリアドレス不正の場合)
メッセージ番号の内容については,「付録B トランスレータのメッセージ」を参照してください。

戻り値
トランスレータ起動コマンド実行時の戻り値と同じです。ettransコマンドの戻り値については,「5.4.2 ettransコマンドの戻り値」を参照してください。