typedef enum { MQ_DIRECT, MQ_TMP, MQ_SHM, MQ_EMS } MQAM;
各変数の意味は次の通りである。| mqdb.[プロセス番号].[ファイル記述子] |
typedef enum { MQ_OLD, MQ_NEW } MQDF;
本変数において、MQ_OLDは元ファイルのデータフォーマットがOLDフォーマットであることを、MQ_NEWはNEWフォーマットであることを示す。なお、アポロ月震データのフォーマットについては、寺薗(1992)などに詳述されている。
typedef enum { MQ_LP, MQ_SP, MQ_TIDAL } MQDT;
本変数において、MQ_LPは長周期データを、MQ_SPは短周期データを、MQ_TIDALは潮汐データを表す。
typedef enum { MQ_FULLTEXT, MQ_COMPOSITE, MQ_XDR } MQFT;
MQ_FULLTEXTは、ヘッダ部、データ部共にテキストデータであることを示し、MQ_COMPOSITEは、ヘッダ部のみがテキストで、データ部はバイナリ出力されていることを示す。なお、このバイナリ出力部は機種、処理系及びCPUのバイトオーダに依存するため、MQ_COMPOSITEファイルについては、異機種間、あるいは異なる処理系でコンパイルされたライブラリ間でのデータの互換性は保証されない。
typedef enum { MQ_FILE, MQ_STDIN, MQ_STDOUT, MQ_STDERR } MQIO;
各変数の意味は次の通り。
typedef enum { MQ_PEAKED, MQ_FLAT } MqMode;
本変数において、MQ_PEAKEDは peaked モードでの観測、MQ_FLATはflatモードでの観測が行なわれたことを示す。
typedef enum { MQ_READ, MQ_WRITE, MQ_UNKNOWN } MQRW;
MQ_READは読み出しを、MQ_WRITEは書き出しを意味する。MQ_UNKNOWNはアクセス形態が未決定であることを意味するため、MQLIB内でこの状態のままファイルアクセスが行なわれるとエラーとなる。
typedef enum { MQ_NOACCESS, MQ_SUCCESS, MQ_FAIL } MqStat;
MQ_NOACCESSは、該当するヘッダのアクセスが行なわれなかったことを示し、MQ_SUCCESSは、アクセスが成功した時にセットされる。MQ_FAILは、アクセスが失敗した際の値である。
typedef enum { MQ_YES, MQ_NO } MqYesNo;
typedef struct {
MqYesNo AveAmp; /* 平均振幅 */
MqYesNo Channels; /* チャンネル数 */
MqYesNo DataCreDate; /* データ作成日時 */
MqYesNo DataFormat; /* 元ファイルのデータフォーマット */
MqYesNo DataModDate; /* データの更新日時 */
MqYesNo DataType; /* データ種別 ( OLD/NEW ) */
MqYesNo EndRecord; /* 元ファイルのデータ終了レコード数 */
MqYesNo MaxAmp; /* 最大振幅 */
MqYesNo NumOfData; /* データ数 */
MqYesNo ObsMode; /* 観測モード ( PEAKED / FLAT ) */
MqYesNo OrgFileName; /* 元データのファイル名 */
MqYesNo SampRate; /* サンプリング間隔 */
MqYesNo Station; /* 観測ステーション */
MqYesNo StartRecord; /* 元ファイルのデータ開始レコード数 */
MqYesNo StartTime; /* データの開始時刻 */
MqYesNo TapeNumber; /* テープ番号 */
} MqAccess;
typedef struct {
unsigned short channels; /* データのチャンネル数 */
double data[MQCHANNELMAX+1]; /* データ */
} MqAmp;
typedef struct {
MqYesNo InUse; /* ファイル記述子が使用されているかどうかのフラグ */
MQAM accmethod; /* アクセス方法 */
MQIO iostream; /* 入出力の方法(ファイル、標準入出力) */
MQRW ReadWrite; /* 入出力の方向(入力か出力か) */
char *filename; /* 実際のファイル名 */
MqLibInfo libinfo; /* 読みとられたライブラリ情報 */
本変数は、プログラム内ではグローバル変数 MqFilDesc として使用される。
typedef struct MqHeader {
MqAmp AveAmp; /* 平均振幅 */
unsigned short Channels; /* チャンネル数 */
MQDF DataFormat; /* データのフォーマット */
MQDT DataType; /* データ種別 */
unsigned long EndRecord; /* 元ファイルにおけるデータ終了レコード数 */
MQFT FileType; /* データファイル種別 */
MqAmp MaxAmp; /* 最大振幅 */
time_t ModDate; /* 修正日時 */
unsigned long NumOfData; /* データ数 */
MqMode ObsMode; /* 観測モード */
char OrgFile[FILENAME_MAX]; /* 元のデータファイル名 */
MqAmp SampRate; /* サンプリング間隔 */
unsigned long StartRecord; /* 元ファイルにおけるデータ開始レコード数 */
MqTime StartTime; /* データの開始時刻 */
unsigned short Station; /* 観測ステーション */
unsigned short TapeNumber; /* テープ番号 */
} MqHeader;
個々の変数名はヘッダに対応する。変数の内容については、「月震データベース仕様」に述べられている。
typedef struct {
char LibType[2]; /* ライブラリ種類識別子 */
char Release; /* リリース番号 */
char Major; /* メジャー番号 */
char Minor; /* マイナー番号 */
} MqLibVer;
LibTypeには、英文字2文字で記されるライブラリ種類識別子が入る。Release、major、minorには、それぞれ、ライブラリ番号、メジャー番号、マイナー番号が格納される。但し、それぞれの変数の型は char 型であり、数字ではありながら short や long などではない。
typedef struct {
MqLibVer LibVer; /* ライブラリのバージョン */
char ProgSign[MQPROGSIGNLEN]; /* プログラム署名 */
} MqLibInfo;
typedef struct {
unsigned short year; /* 年 */
unsigned short day; /* 日 ( 1 から 366 ) */
unsigned short hour; /* 時 ( 0 から 23 ) */
unsigned short minute; /* 分 ( 0 から 59 ) */
unsigned short second; /* 秒 ( 0 から 59 ) */
unsigned short ms; /* マイクロ秒 ( 0 から 999 ) */
} MqTime;
#define MQFILENAMELEN 12 /* ファイル名の長さ */ #define MQFILDESCMAX 16 /* 使用できるファイル記述子の数 */ #define MQLIBVERLEN 5 /* ライブラリ番号の最大長 */ #define MQPROGSIGNLEN 16 /* プログラム署名の最大の長さ(バイト) */ #define MQHDRLENMAX 1024 /* ヘッダの最大の長さ(バイト) */ #define MQHDRLINEMAX 80 /* ヘッダにおける1行の長さの最大値 */ #define MQCHANNELMAX 255 /* 最大チャンネル数 */ #define MQTOPLINEMIN 12 /* 先頭行の長さの最小値(バイト) */また、MQLIBのライブラリ種別、リリース番号、メジャー番号、マイナー番号も、マ クロで定義されている。
#define MQLIB_LIBTYPE "MQ" /* ライブラリ種別 */ #define MQLIB_RELEASE 1 /* リリース番号 */ #define MQLIB_MAJOR 0 /* メジャー番号 */ #define MQLIB_MINOR 0 /* マイナー番号 */その他に、次のようなマクロ定義が mqdb.h 内に記述されている。これらは直接 MQLIB の動作には関係しないが、ユーザ・プログラム内で利用することもできる。このうち FILENAME_MAX は、本来 ANSI C 対応の処理系であれば stdio.h などで定義されているはずであり、MQLIB では未定義の場合のみ、改めて定義し直している。従って、処理系で既に FILENAME_MAX が定義されている場合には、そちらが優先される。
#define MQ_TRUE 1 /* Boolean 型変数 */ #define MQ_FALSE 0 /* Boolean 型変数 */ #define FILENAME_MAX 255 /* ファイル名の最大長 */
struct {
unsigned long errno; /* エラー番号 */
unsigned long func; /* エラーが発生した関数の番号 */
unsigned short level; /* エラーのレベル */
unsigned short warn; /* エラーメッセージを出力するエラーのレベル */
} MqErr;
エラー番号については後述する。printf( "%s\n", MqFuncName[MQCREATE] );MQLIBの関数は、最初に必ず関数番号をセットするようになっている。そのため、エラーが起きた場合、必ずその関数番号が参照される。但し、MQLIB関数がさらに上のMQLIB関数から呼び出されている場合などは、必ずしもエラーの原因が該当する関数ではない場合もあるので、デバッグなどの際には注意する必要がある。
struct {
MqStat AveAmp; /* 平均振幅 */
MqStat Channels; /* チャンネル数 */
MqStat DataCreDate; /* データ作成日時 */
MqStat DataFormat; /* 元ファイルのデータフォーマット */
MqStat DataModDate; /* データ修正日時 */
MqStat DataType; /* データ種別 */
MqStat EndRecord; /* データの終了レコード */
MqStat FileType; /* ファイルフォーマット */
MqStat MaxAmp; /* 最大振幅 */
MqStat NumOfData; /* データ数 */
MqStat ObsMode; /* 観測モード */
MqStat OrgFileName; /* 元データのファイル名 */
MqStat SampRate; /* サンプリング間隔 */
MqStat Station; /* 観測点 */
MqStat StartRecord; /* データの開始レコード */
MqStat StartTime; /* データの開始時刻 */
MqStat TapeNumber; /* テープ番号 */
} MqStatus;
| メンバの型 | メンバ名 | 内容 |
| char | LibType[2] | MQDBライブラリ識別子 |
| char | Release | MQDBリリース番号 |
| char | Major | MQDBメジャー番号 |
| char | Minor | MQDBマイナー番号 |
![]() 前の章へ |
![]() 目次へ |
![]() 次の章へ |
| 月震ホームページへ | ![]() terakinizers!!トップへ |