構造体、共用体、列挙体 DEFINE,マクロ
struct mssAllocInf
struct mssComHelp
struct mssGlobalVariables
struct mssStrList
struct mssStrings
mssErrorNoDefault
mssExitSuccess
0001: /**
0002: * # CHAPTER #
0003: * ============================================================================
0004: * MUSASHIで用いられる基本的な関数用のヘッダーファイル
0005: * ============================================================================
0006: */
0007:
0008: #include <mssConfig.h>
0009:
0010: #include <stdlib.h>
0011: #include <time.h>
0012:
0013: #ifndef __MSSBASE_H
0014: #define __MSSBASE_H 1
0015:
0016:
0017: /**
0018: * # DEFINE #
0019: * 正常終了時辺値
0020: */
0021: #define mssExitSuccess EXIT_SUCCESS /*正常終了時辺値*/
0022:
0023: /**
0024: * # DEFINE #
0025: *デフォルトのエラー終了番号
0026: */
0027: #define mssErrorNoDefault 1
0028:
0029: /**
0030: * # STRUCT #
0031: * コマンドヘルプの型
0032: */
0033: struct mssComHelp {
0034: char *name; /*コマンド名*/
0035: char *version; /*バージョン*/
0036: char *title; /*タイトル*/
0037: char *summary; /*要約*/
0038: char *example; /*利用例*/
0039: char *reference; /*参照コマンド*/
0040: char *author; /*作者*/
0041: char *bugReport; /*バグレポート先E-mail*/
0042: char *homepage; /*コマンドに関するHP*/
0043: };
0044:
0045: /**
0046: * # STRUCT #
0047: * MUSASHIが利用するグローバル変数構造体(base.cにて定義)
0048: */
0049: struct mssGlobalVariables {
0050: struct mssComHelp *comHelp; /*コマンドヘルプ*/
0051: int inCnt; /*データ入力行数*/
0052: int outCnt; /*データ出力行数*/
0053: int keyNo; /*現在処理中のキー番号*/
0054: int keyCnt; /*現在処理中のキーの行数*/
0055: int keyLine; /*現在処理中のキーのなかでの行番号*/
0056: /*上記の各種件数は、APIでは一切更新しないので、各コマンドの
0057: プログラムの中で設定する。
0058: inCnt,outCntは、コマンド終了メッセージ(mssShowEndMsg関数)
0059: の一部として出力される。*/
0060: int inFldCnt; /*入力データの項目数(cal_prior関数で設定)*/
0061: int quiet; /*メッセージ出力をしないフラグ(mssInit,setOption関数で設定)*/
0062: int argc; /*コマンドライン引数(mssInit関数で設定)*/
0063: char **argv; /*コマンドライン引数(mssInit関数で設定)*/
0064: char *tmpPath; /*一時ファイル用ディレクトリパス名*/
0065: char *xmlDefVer; /*XMLのデフォルトバージョン*/
0066: char *xmlDefEnc; /*XMLのデフォルトエンコーディング*/
0067: char *xtDefVer; /*XMLtableのデフォルトバージョン*/
0068: int txtFlg; /*XMLtableでなく、plain textデータを使うフラグ(mssSetOption関数で設定*/
0069: int allocDeb; /*領域確保変数のデバッグフラグ*/
0070: struct mssAllocInf *allocInf;
0071: int allocCnt; /*{M,C,Re}allocで領域確保した回数*/
0072: int allocFreeCnt; /*{M,C,Re}alloc-Freeで領域確保されている数(全て開放していれば最後には0になるはず)*/
0073: int writeHeaderFlg; /*ヘッダーを既に出力していたら1、さもなければ0(mssWriteHeader関数でセット)*/
0074: int writeFooterFlg; /*フッターを既に出力していたら1、さもなければ0*/
0075: int usedTempFileFlg; /*一時ファイルを利用しているフラグ*/
0076: };
0077:
0078: /**
0079: * # STRUCT #
0080: * 動的メモリ確保のデバッグ用情報
0081: */
0082: struct mssAllocInf {
0083: int func; /*0:free,1:calloc,2:malloc,3:realloc,4:reallocLim,5:strdup*/
0084: void *add; /*アドレス*/
0085: int cnt; /*AllocCnt*/
0086: char *msg; /*メッセージ*/
0087: int refNo; /*allocに対するfree,freeに対するallocの番号*/
0088: };
0089:
0090: /**
0091: * # STRUCT #
0092: * 文字列をConcatenateし、一つの文字列領域を作成する構造体
0093: */
0094: struct mssStrings {
0095: char *str; /*先頭文字*/
0096: int cnt; /*文字数*/
0097: };
0098:
0099: /**
0100: * # STRUCT #
0101: * 文字列を配列リストとして登録する構造体
0102: * 登録されたn番目の文字列へのポインタによるアクセスが可能
0103: */
0104: struct mssStrList {
0105: char *str; /*文字列リストの先頭*/
0106: int *pointer; /*各文字列の相対的位置(先頭からの文字数)が入る*/
0107: int cnt; /*登録された文字列数*/
0108: int chrCnt; /*登録された総文字数*/
0109: };
0110:
0111: /**
0112: * # PROTOTYPE #
0113: */
0114: void mssSetSignalHandler();
0115: void mssInit(int argc, char **argv, struct mssComHelp *comHelp);
0116: void mssEnd(int status);
0117: void mssShowStartMsg();
0118: void mssShowEndMsg();
0119: void mssShowErrMsg(char *msg, ...);
0120: void * mssCalloc(int size, char *errMsg);
0121: void * mssMalloc(int size, char *errMsg);
0122: void * mssRealloc(void *ptr, int size, char *errMsg);
0123: void * mssReallocLim(void *ptr,int size,int lim,char *errMsg);
0124: char * mssStrdup(char *s);
0125: void mssFree(void *add);
0126: void mssShowAllocInf(void);
0127: struct mssStrings * mssInitStrings();
0128: void mssFreeStrings(struct mssStrings *s);
0129: void mssCatStrings(struct mssStrings *s, char *str);
0130: void mssCatnStrings(struct mssStrings *s, char *str, int n);
0131: struct mssStrList * mssInitStrList();
0132: void mssFreeStrList(struct mssStrList *s);
0133: void mssPutStrList(struct mssStrList *s, char *str);
0134: char * mssGetStrList(struct mssStrList *s,int n);
0135: char * mssCatTwoStrings(char *str1, char *str2);
0136: char * mssSkipStrBlock(char *str, char startChr, char endChr);
0137: void mssSwapInt(int *x, int *y);
0138: void mssSwapLng(long *x, long *y);
0139: void mssSwapDbl(double *x, double *y);
0140: char ** mssTokByChr(char *string, char tok, int *cnt, int dup);
0141: int mssIsValidStr(char *str);
0142: char * mssItoA(int num);
0143: char * mssFtoA(double num);
0144: time_t mssStrToTime(char *str);
0145: int mssInitRand(int seed);
0146: int mssGenRand(int from, int to);
0147: double mssGenRand01();
0148:
0149: #endif /* _FP_H */