MUSASHI C source: xt2txt.c


0001: /*============================================================================*/ 
0002: /* 変更履歴                                                                   */ 
0003: /*----------------------------------------------------------------------------*/ 
0004: /* 1.0 : 新しいAPIに対応(2003/06)                                             */ 
0005: /*============================================================================*/ 
0006: #include <musashi.h
0007: #include <stdlib.h> 
0008: #include <string.h> 
0009:  
0010: #include <xt2txtHelp.h> 
0011: struct mssComHelp comHelp={ 
0012:   "xt2txt",       /* コマンド名       */ 
0013:   "1.0",          /* バージョン       */ 
0014:   HELPT,          /* コマンドタイトル */ 
0015:   HELPS,          /* 要約             */ 
0016:   HELPE,          /* 利用例           */                                       
0017:   HELPR,          /* 参照コマンド     */ 
0018:   HELPA,          /* 作者情報         */ 
0019:   HELPB,          /* バグレポート情報 */                                       
0020:   HELPH           /* ホームページ     */ 
0021: }; 
0022:      
0023: extern struct mssGlobalVariables mssGV; 
0024:  
0025: int main(int argc, char *argv[]){ 
0026: /*============================================================================*/ 
0027: /* オプション宣言&定義                                                       */ 
0028: /*============================================================================*/ 
0029: /*----------------------------------------------------------------------------*/ 
0030: /* 先頭行に項目名を出力する                                                   */ 
0031: /*----------------------------------------------------------------------------*/ 
0032:   MssOptFLG optHFD={ 
0033:     OFLG,   /* オプションタイプ                                             */ 
0034:     "F",    /* キーワード(複数文字は不可)                                   */ 
0035:     0,      /* デフォルト(基本的には0) 常にonにしたいときは1にする          */ 
0036:     HFDT,   /* このオプションのタイトル(Helpで表示)                         */ 
0037:     HFDC    /* このオプションのコメント(Helpで表示)                         */ 
0038:   }; 
0039:  
0040: /*----------------------------------------------------------------------------*/ 
0041: /* 入力ファイル                                                               */ 
0042: /*----------------------------------------------------------------------------*/ 
0043:   MssOptOTF optEXP={ 
0044:     OOTF,   /* オプションタイプ                                             */ 
0045:     "E",    /* キーワード(複数文字は不可)                                   */ 
0046:     0,      /* 0:オプション, 1:必須                                         */ 
0047:     EXPT,   /* このオプションのタイトル(Helpで表示)                         */ 
0048:     EXPC    /* このオプションのコメント(Helpで表示)                         */ 
0049:   }; 
0050:  
0051: /*----------------------------------------------------------------------------*/ 
0052: /* 入力ファイル                                                               */ 
0053: /*----------------------------------------------------------------------------*/ 
0054:   MssOptINF optINF={ 
0055:     OINF,   /* オプションタイプ                                             */ 
0056:     "i",    /* キーワード(複数文字は不可)                                   */ 
0057:     0,      /* 0:オプション, 1:必須                                         */ 
0058:     1,      /* 指定可能の最大ファイル数                                     */ 
0059:     0,      /*1:file not foundのエラーで終了しない 0:する                   */ 
0060:     INFT,   /* このオプションのタイトル(Helpで表示)                         */ 
0061:     INFC    /* このオプションのコメント(Helpで表示)                         */ 
0062:   }; 
0063:  
0064: /*----------------------------------------------------------------------------*/ 
0065: /* 出力ファイル                                                               */ 
0066: /*----------------------------------------------------------------------------*/ 
0067:   MssOptOTF optOTF={ 
0068:     OOTF,   /* オプションタイプ                                             */ 
0069:     "o",    /* キーワード(複数文字は不可)                                   */ 
0070:     0,      /* 0:オプション, 1:必須                                         */ 
0071:     OTFT,   /* このオプションのタイトル(Helpで表示)                         */ 
0072:     OTFC    /* このオプションのコメント(Helpで表示)                         */ 
0073:   }; 
0074:  
0075: /*----------------------------------------------------------------------------*/ 
0076: /* 圧縮出力                                                                   */ 
0077: /*----------------------------------------------------------------------------*/ 
0078:   MssOptFLG optZIP={ 
0079:     OFLG,   /* オプションタイプ                                             */ 
0080:     "z",    /* キーワード(複数文字は不可)                                   */ 
0081:     0,      /* デフォルト(基本的には0) 常にonにしたいときは1にする          */ 
0082:     ZIPT,   /* このオプションのタイトル(Helpで表示)                         */ 
0083:     ZIPC    /* このオプションのコメント(Helpで表示)                         */ 
0084:   }; 
0085:  
0086: /*----------------------------------------------------------------------------*/ 
0087: /* オプションをまとめる                                                       */ 
0088: /*----------------------------------------------------------------------------*/ 
0089:   void *opt[]={&optHFD,&optEXP,&optINF,&optOTF,&optZIP,NULL}; 
0090:      
0091: /*============================================================================*/ 
0092: /* 変数宣言&定義                                                             */ 
0093: /*============================================================================*/ 
0094:   struct mssHeader *hdi; /*入力ファイル用<head>タグ格納構造体*/ 
0095:  
0096:   struct mssFPR    *fpr; /*入力ファイル構造体*/ 
0097:   struct mssFPW    *fpw; /*出力ファイル構造体*/ 
0098:   struct mssFPW    *fpw2;/*エクスポートファイル構造体*/ 
0099:   struct mssFldRec *fr;  /*項目-行バッファ構造体*/ 
0100:  
0101:   int i; 
0102:   int tmp; 
0103:  
0104: /*------------------------------------------------------------------------------ 
0105: パラメータ処理 
0106: ------------------------------------------------------------------------------*/ 
0107:   mssInit(argc,argv,&comHelp);        /* シグナル処理などの初期化     */ 
0108:   mssHelpDoc(opt,&comHelp,argc,argv); /* ヘルプ                       */ 
0109:   mssSetOption(opt,argc,argv);        /* コマンドオプションの設定     */ 
0110:   fpr=mssOpenFPR(optINF.str,4);       /* 入力ファイルオープン         */ 
0111:   hdi=mssReadHeader(fpr);             /* ヘッダの読み込み             */ 
0112:  
0113: /*----------------------------------------------------------------------------*/ 
0114: /*出力ヘッダーの作成と出力                                                    */ 
0115: /*----------------------------------------------------------------------------*/ 
0116:   /*標準出力オープン+ヘッダーの出力*/ 
0117:   fpw=mssOpenFPW(optOTF.str,optZIP.set,0); 
0118:  
0119:   /*ヘッダーのエクスポート*/ 
0120:   if(optEXP.set){ 
0121:     fpw2=mssOpenFPW(optEXP.str,optZIP.set,0); 
0122:     tmp=mssGV.txtFlg;mssGV.txtFlg=0;     
0123:     mssWriteHeader(hdi, fpw2); 
0124:     mssWriteFooter(fpw2);  /*フッターの出力*/ 
0125:     mssGV.txtFlg=tmp;     
0126:     mssCloseFPW(fpw2); 
0127:   } 
0128:  
0129:   /*テキストのヘッダー出力*/ 
0130:   if(optHFD.set){ 
0131:     for(i=0; i<hdi->flds->cnt-1; i++){ 
0132:       mssWriteStr(MssFlds2name(hdi->flds,i),fpw); 
0133:       mssWriteDlm(fpw); 
0134:     } 
0135:     mssWriteStr(MssFlds2name(hdi->flds,i),fpw); 
0136:     mssWriteRet(fpw); 
0137:   } 
0138:  
0139: /*----------------------------------------------------------------------------*/ 
0140: /*メインルーチン                                                              */ 
0141: /*----------------------------------------------------------------------------*/ 
0142:   fr=mssInitFldRec(hdi->flds->cnt); 
0143:   while( EOF != mssReadFldRec(fpr,fr) ){ 
0144:     mssGV.inCnt++; 
0145:     mssWriteFld(fr->pnt, fr->fldCnt, "\n", fpw); 
0146:     mssGV.outCnt++; 
0147:   } 
0148:   mssFreeFldRec(fr); 
0149:  
0150: /*----------------------------------------------------------------------------*/ 
0151: /*フッター出力&終了処理                                                       */ 
0152: /*----------------------------------------------------------------------------*/ 
0153:   mssCloseFPR(fpr);        /*入力ファイルのクローズ*/ 
0154:   mssCloseFPW(fpw);        /*出力ファイルのクローズ*/ 
0155:   mssFreeHeader(hdi);      /*入力ヘッダ領域開放*/ 
0156:   mssFreeOption(opt);      /*オプション領域開放*/ 
0157:   mssShowEndMsg();         /*完了メッセージ*/ 
0158:   mssEnd(mssExitSuccess);  /*終了*/ 
0159:   return(0); /* to avoid warning message*/ 
0160: }