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: }