構造体、共用体、列挙体 DEFINE,マクロ
struct mssFields
struct mssFldInfo
struct mssHeader
MssFlds2length
MssFlds2name
MssFlds2num
MssFlds2numFlg
MssFlds2priority
MssFlds2revFlg
0001: /**
0002: * # CHAPTER #
0003: * ============================================================================
0004: * XMLtableのヘッダー関連のヘッダーファイル
0005: * ============================================================================
0006: */
0007:
0008: #include <mssOutput.h>
0009: #include <mssOption.h>
0010:
0011: #ifndef __MSSHEADER_H
0012: #define __MSSHEADER_H 1
0013:
0014: #include <mssInput.h>
0015:
0016: /**
0017: * # MACRO #
0018: * mssFields構造体に格納されたi番目の項目の項目番号を得る。
0019: */
0020: #define MssFlds2num(flds,i) ((*((flds)->fi+(i)))->num)
0021:
0022: /**
0023: * # MACRO #
0024: * mssFields構造体に格納されたi番目の項目の項目名を得る。
0025: */
0026: #define MssFlds2name(flds,i) ((*((flds)->fi+(i)))->name)
0027:
0028: /**
0029: * # MACRO #
0030: * mssFields構造体に格納されたi番目の項目のソート優先順位番号を得る。
0031: */
0032: #define MssFlds2priority(flds,i) ((*((flds)->fi+(i)))->priority)
0033:
0034: /**
0035: * # MACRO #
0036: * mssFields構造体に格納されたi番目の項目の逆順ソートフラグを得る。
0037: */
0038: #define MssFlds2revFlg(flds,i) ((*((flds)->fi+(i)))->revFlg)
0039:
0040: /**
0041: * # MACRO #
0042: * mssFields構造体に格納されたi番目の項目の数値ソートフラグを得る。
0043: */
0044: #define MssFlds2numFlg(flds,i) ((*((flds)->fi+(i)))->numFlg)
0045:
0046: /**
0047: * # MACRO #
0048: * mssFields構造体に格納されたi番目の項目の長さ(固定長時のみ)を得る。
0049: */
0050: #define MssFlds2length(flds,i) ((*((flds)->fi+(i)))->length)
0051:
0052: /**
0053: * # STRUCT #
0054: * xmlTablの項目に関する情報を格納する構造体
0055: */
0056: struct mssFldInfo {
0057: int num; /*項目番号(0から始まる)*/
0058: char *name; /*項目名*/
0059: int priority;/*ソートのキー優先番号(1から始まる、無しは0)*/
0060: int revFlg; /*逆順ソートフラグ(0 or 1)*/
0061: int numFlg; /*数値ソートフラグ(0 or 1)*/
0062: int length; /*固定長のときの項目長(情報なしの場合は0)*/
0063: char *comment; /*項目のコメント(情報なしの場合はNULL)*/
0064: };
0065:
0066: /**
0067: * # STRUCT #
0068: * 複数項目を格納する構造体
0069: */
0070: struct mssFields {
0071: struct mssFldInfo **fi; /*mssFldInfoへのポインタ配列*/
0072: int cnt; /*項目の数*/
0073: };
0074:
0075: /**
0076: * # STRUCT #
0077: * xmlTableのヘッダー情報を格納する構造体
0078: */
0079: struct mssHeader {
0080: struct mssFields * flds; /*項目情報*/
0081: char * title; /*タイトル文字列*/
0082: char * comment; /*コメント文字列(改行は保存される)*/
0083: int version; /*xmlTableのバージョン(1.0->10, 1.1->11)*/
0084: char * xmlver; /*XMLバージョン*/
0085: char * xmlenc; /*XMLエンコーディング*/
0086: int datTop; /*実際のデータが始まるまでの文字数*/
0087: int recCnt; /*レコード行数(情報なしの場合は-1)*/
0088: };
0089:
0090: /**
0091: * # PROTOTYPE #
0092: */
0093: struct mssFldInfo *mssInitFldInfo();
0094: void mssFreeFldInfo( struct mssFldInfo *fi);
0095: void mssShowFldInfo(struct mssFldInfo *fi);
0096: struct mssFldInfo * mssFldNum2Add(struct mssFields *flds, int num);
0097: struct mssFldInfo * mssFldNam2Add(struct mssFields *flds, char *name);
0098: struct mssFldInfo ** mssFldGlbNam2Add(struct mssFields *flds, char *name);
0099: int mssFldNam2Num(struct mssFields *flds, char *name);
0100: int mssFldNum2SrtPri(struct mssFields *flds, int num);
0101: int mssFldNum2SrtRev(struct mssFields *flds, int num);
0102: int mssFldNum2SrtNum(struct mssFields *flds, int num);
0103: void mssFreeHeader(struct mssHeader *hd);
0104: struct mssHeader * mssInitHeader(char *title, char *comment);
0105: struct mssHeader * mssInitCpyHeader(struct mssHeader *old);
0106: struct mssHeader * mssInitSetHeader( char *title, char *comment, char *xmlver, char *xmlenc, int version);
0107: void mssSetHeaderRecCnt(struct mssHeader *hd, int recCnt);
0108: struct mssFields * mssInitFields();
0109: void mssFreeFields(struct mssFields *flds);
0110: void mssShowFields(struct mssFields *flds);
0111: void mssUpdateFieldsSortPriority(struct mssFields *flds);
0112: void mssSetFldInfoSort(struct mssFldInfo *fi, int prioriy, int revFlg,int numFlg);
0113: void mssClearFieldsSort(struct mssFields *flds);
0114: void mssSetFieldsSort(struct mssFields *flds, struct mssFields *sortFlds);
0115: void mssSetFieldsSortPriority(struct mssFields *flds);
0116: void mssSetFldInfoLength(struct mssFldInfo *fi, int length);
0117: void mssSetFldInfoNum(struct mssFldInfo *fi, int num);
0118: void mssSetFldInfoName(struct mssFldInfo *fi, char *name);
0119: void mssSetFldInfoComment(struct mssFldInfo *fi, char *comment);
0120: void mssSetFieldsSequenceNum(struct mssFields *flds);
0121: void mssAddFieldsByStr(struct mssFields *flds, char *str);
0122: void mssAddFieldsByStrList(struct mssFields *flds, char **str, int cnt);
0123: void mssAddFieldsByFldInfo(struct mssFields *flds, struct mssFldInfo *fi);
0124: void mssAddFieldsByFldInfoList(struct mssFields *flds, struct mssFldInfo **fi);
0125: void mssAddFieldsByFields(struct mssFields *flds, struct mssFields *addFlds);
0126: void mssAddHeadOrOptFields(struct mssFields *flds, struct mssHeader *hd, MssOptFLD *optFld);
0127: void mssWriteFldInfo(struct mssFldInfo *fi, int version, struct mssFPW *fp);
0128: void mssWriteHeader( struct mssHeader *hd, struct mssFPW *fp);
0129: void mssWriteFooter(struct mssFPW *fp);
0130: void mssCreateBlankXtFile(char **fldName, int fldCnt, char *fname);
0131: struct mssHeader * mssReadHeader( struct mssFPR *fp);
0132: void mssShowHeader(struct mssHeader *hd);
0133: int mssChkSorted( struct mssFields *sf, struct mssHeader *hd);
0134: void mssSetOptFld(MssOptFLD *optFLD, struct mssHeader *hd);
0135: void mssSetOptKey(MssOptKEY *optKEY, struct mssHeader *hd);
0136:
0137: #endif /* _HEADER_H */
0138: