MUSASHI C source: xtsetchr.c
0001: /*============================================================================*/
0002: /* 変更履歴 */
0003: /*----------------------------------------------------------------------------*/
0004: /* 1.0 : 新しいAPIに対応 2003/06/20 */
0005: /*============================================================================*/
0006:
0007: #include <musashi.h>
0008: #include <stdlib.h>
0009: #include <string.h>
0010:
0011: #include <xtsetchrHelp.h>
0012: struct mssComHelp comHelp={
0013: "xtsetchr", /* コマンド名 */
0014: "1.0", /* バージョン */
0015: HELPT, /* コマンドタイトル */
0016: HELPS, /* 要約 */
0017: HELPE, /* 利用例 */
0018: HELPR, /* 参照コマンド */
0019: HELPA, /* 作者情報 */
0020: HELPB, /* バグレポート情報 */
0021: HELPH /* ホームページ */
0022: };
0023:
0024: extern struct mssGlobalVariables mssGV;
0025:
0026: int main(int argc, char *argv[]){
0027: /*============================================================================*/
0028: /* オプション宣言&定義 */
0029: /*============================================================================*/
0030: /*----------------------------------------------------------------------------*/
0031: /* 追加項目の値 */
0032: /*----------------------------------------------------------------------------*/
0033: MssOptSTR optVAL={
0034: OSTR, /* オプションタイプ */
0035: "v", /* キーワード(複数文字は不可) */
0036: 1, /* 0:オプション, 1:必須, 2:XMLtableでのみ必須(txtでは無視) */
0037: NULL , /* デフォルト */
0038: 1, /* 文字列の最小長 */
0039: MssFieldMaxLen,/* 文字列の最大長 */
0040: VALT, /* このオプションのタイトル(Helpで表示) */
0041: VALC /* このオプションのコメント(Helpで表示) */
0042: };
0043:
0044: /*----------------------------------------------------------------------------*/
0045: /* 新項目名 */
0046: /*----------------------------------------------------------------------------*/
0047: MssOptSLS optFNM={
0048: OSLS, /* オプションタイプ */
0049: "a", /* キーワード(複数文字は不可) */
0050: 2, /* 0:オプション, 1:必須, 2:XMLtableでのみ必須(txtでは無視) */
0051: NULL, /* デフォルト(文字列) */
0052: 1, /* カンマで区切られる要素数の最大値 */
0053: 1, /* 各要素の文字列長の最小値 */
0054: MssFieldNameMaxLen,/* 各要素の文字列長の最大値 */
0055: 0, /* 1:要素にコロンを指定できる,0:不可 ex) aaaa:xxxxx */
0056: FNMT, /* このオプションのタイトル(Helpで表示) */
0057: FNMC /* このオプションのコメント(Helpで表示) */
0058: };
0059:
0060: /*----------------------------------------------------------------------------*/
0061: /* 入力ファイル */
0062: /*----------------------------------------------------------------------------*/
0063: MssOptINF optINF={
0064: OINF, /* オプションタイプ */
0065: "i", /* キーワード(複数文字は不可) */
0066: 0, /* 0:オプション, 1:必須 */
0067: 1, /* 指定可能の最大ファイル数 */
0068: 0, /*1:file not foundのエラーで終了しない 0:する */
0069: INFT, /* このオプションのタイトル(Helpで表示) */
0070: INFC /* このオプションのコメント(Helpで表示) */
0071: };
0072:
0073: /*----------------------------------------------------------------------------*/
0074: /* 出力ファイル */
0075: /*----------------------------------------------------------------------------*/
0076: MssOptOTF optOTF={
0077: OOTF, /* オプションタイプ */
0078: "o", /* キーワード(複数文字は不可) */
0079: 0, /* 0:オプション, 1:必須 */
0080: OTFT, /* このオプションのタイトル(Helpで表示) */
0081: OTFC /* このオプションのコメント(Helpで表示) */
0082: };
0083:
0084: /*----------------------------------------------------------------------------*/
0085: /* 圧縮出力 */
0086: /*----------------------------------------------------------------------------*/
0087: MssOptFLG optZIP={
0088: OFLG, /* オプションタイプ */
0089: "z", /* キーワード(複数文字は不可) */
0090: 0, /* デフォルト(基本的には0) 常にonにしたいときは1にする */
0091: ZIPT, /* このオプションのタイトル(Helpで表示) */
0092: ZIPC /* このオプションのコメント(Helpで表示) */
0093: };
0094:
0095: /*----------------------------------------------------------------------------*/
0096: /* plain text */
0097: /*----------------------------------------------------------------------------*/
0098: MssOptFLG optTXT={
0099: OFLG, /* オプションタイプ */
0100: "t", /* キーワード(複数文字は不可) */
0101: 0, /* デフォルト(基本的には0) 常にonにしたいときは1にする */
0102: TXTT, /* このオプションのタイトル(Helpで表示) */
0103: TXTC /* このオプションのコメント(Helpで表示) */
0104: };
0105:
0106: /*----------------------------------------------------------------------------*/
0107: /* オプションをまとめる */
0108: /*----------------------------------------------------------------------------*/
0109: void *opt[]={&optVAL,&optFNM,&optINF,&optOTF,&optZIP,&optTXT,NULL};
0110:
0111: /*============================================================================*/
0112: /* 変数宣言&定義 */
0113: /*============================================================================*/
0114: struct mssHeader *hdi; /*入力ファイル用<head>タグ格納構造体*/
0115: struct mssHeader *hdo; /*出力ファイル用<head>タグ格納構造体*/
0116: struct mssFPR *fpr; /*入力ファイル構造体 */
0117: struct mssFPW *fpw; /*出力ファイル構造体 */
0118: struct mssFldRec *fr; /*項目-行バッファ構造体 */
0119:
0120: /*----------------------------------------------------------------------------*/
0121: /* 前処理 */
0122: /*----------------------------------------------------------------------------*/
0123: mssInit(argc,argv,&comHelp); /* シグナル処理などの初期化 */
0124: mssHelpDoc(opt,&comHelp,argc,argv);/* ヘルプ */
0125: mssSetOption(opt,argc,argv); /* コマンドオプションの設定 */
0126: fpr=mssOpenFPR(optINF.str,4); /* 入力ファイルオープン */
0127: hdi=mssReadHeader(fpr); /* ヘッダの読み込み */
0128:
0129: /*-vはスペースを含んではならない*/
0130: if(NULL != strchr(optVAL.str,' ') ){
0131: mssShowErrMsg("can't include spaces for -v option");
0132: mssEnd(mssErrorNoDefault);
0133: }
0134:
0135: /*----------------------------------------------------------------------------*/
0136: /*出力ヘッダーの作成と出力 */
0137: /*----------------------------------------------------------------------------*/
0138: /*出力ヘッダーの初期化(タイトル等のコピー)*/
0139: hdo=mssInitCpyHeader(hdi);
0140:
0141: /*入力ヘッダの全項目を追加*/
0142: mssAddFieldsByFields(hdo->flds,hdi->flds);
0143:
0144: /*新項目名の追加*/
0145: mssAddFieldsByStrList(hdo->flds,optFNM.strList,optFNM.cnt);
0146:
0147: /*標準出力オープン+ヘッダーの出力*/
0148: fpw=mssOpenFPW(optOTF.str,optZIP.set,0);
0149: mssWriteHeader(hdo, fpw);
0150:
0151: /*----------------------------------------------------------------------------*/
0152: /*メインルーチン */
0153: /*----------------------------------------------------------------------------*/
0154: fr=mssInitFldRec(hdi->flds->cnt);
0155: while( EOF != mssReadFldRec(fpr,fr) ){
0156: mssGV.inCnt++;
0157:
0158: /*一行書き出し*/
0159: mssWriteFld(fr->pnt, fr->fldCnt, " ", fpw);
0160: mssWriteStr(optVAL.str, fpw);
0161: mssWriteRet(fpw);
0162:
0163: mssGV.outCnt++;
0164: }
0165: mssFreeFldRec(fr);
0166:
0167: /*----------------------------------------------------------------------------*/
0168: /*フッター出力&終了処理 */
0169: /*----------------------------------------------------------------------------*/
0170: /*printf("allocCnt=%d\n",getAllocCnt()); */
0171: mssWriteFooter(fpw); /* フッターの出力 */
0172: mssCloseFPR(fpr); /* 入力ファイルのクローズ */
0173: mssCloseFPW(fpw); /* 出力ファイルのクローズ */
0174: mssFreeHeader(hdi); /* 入力ヘッダ領域開放 */
0175: mssFreeHeader(hdo); /* 出力ヘッダ領域開放 */
0176: mssFreeOption(opt); /* オプション領域開放 */
0177: mssShowEndMsg(); /* 完了メッセージ */
0178: mssEnd(mssExitSuccess); /* 終了 */
0179: return(0); /* to avoid warning message */
0180: }