付録D.9 互換APIの使用例

互換APIの使用例を,次に示します。

#include <stdio.h>
#include "ETtrans.h"

static void print_message(int iCode, char *msg,
                         ETTRANSERRLIST *ErrList);

int main()
{
 int iRet = 0;
 ETTRANSADRSLIST AdrsList[3];
 ETTRANSERRLIST ErrList;
 char *c;
                 /* アドレスリストの設定 */
 AdrsList[0].FormatName = "IN";
 AdrsList[0].DataKind = ET_DK_FILE;
 AdrsList[0].DataAddress = "input.txt";
 AdrsList[1].FormatName = "OUT";
 AdrsList[1].DataKind = ET_DK_FILE;
 AdrsList[1].DataAddress = "output.txt";
 AdrsList[2].FormatName = NULL;
                 /* トランスレータ初期化 */
 iRet = ETtransInit(&c, NULL);
 if (iRet) {
   print_message(iRet, "ETtransInit", NULL);
   goto EXIT;
}
                 /* MDLローディング */
 iRet = ETtransLoadMap(c, "SAMPLE.mdl");
 if (iRet) {
   print_message(iRet, "ETtransLoadMap", NULL);
   goto END;
}
                 /* 変換実行 */
 iRet = ETtransExec(c, AdrsList, NULL, "-IERR",
                    ET_FA_UPDATE, ET_OP_FNOFF, &ErrList);
 if (iRet) {
   print_message(iRet, "ETtransExec", &ErrList);
   goto END;
}
                 /* MDLアンロード */
 iRet = ETtransUnLoadMap(c);
 if (iRet) {
   print_message(iRet, "ETtransUnLoadMap", NULL);
   goto END;
}

END:              /* 終了処理 */
 iRet = ETtransEnd(c);
 if (iRet) {
   print_message(iRet, "ETtransEnd", NULL);
}

EXIT:
 printf("--> Return Code = 0x%08x¥n", iRet);
 return iRet;
}

/*
* エラー情報出力関数
*/
static void print_message(int iCode, char *msg,
                         ETTRANSERRLIST *ErrList)
{
 int i;
 ETTRANSERRDATA *edata;

 printf("### ERROR %s %d ###¥n", msg, iCode);
 if (ErrList) {
   printf(" Error Size = %d¥n", ErrList->Size);
   for (i = 0; i < ErrList->Size; i++) {
      edata = &ErrList->ErrData[i];
      printf("¥t%02d (0x%08x) num=%d",
        edata->MessageNo, edata->ErrorLevel, edata->NumericData);
      if (edata->Information) {
        printf(" info=%s¥n", edata->Information);
      } else {
        printf("¥n");
     }
   }
 }
}