第6章 関数・サブルーチン仕様

本章では、MQLIBにおいて定義されているアクセス用関数の仕様について説明する。
本章の説明は、次のようになっている。
仕様
関数の型、及び引数が書かれている、スペースの関係で、ほとんどの関数について引数は型名だけを記してある。
引数
引数の型名及びその内容が書かれている。引数は左から順に説明される。例えば、func( char *str1, char *str2 )のような関数の場合、
char * はstr1の説明であり、
char * はstr2の説明となる。
また、FORTRANインタフェースについては、C言語用の上位インタフェースに合わせて記述されている。

6.1 上位関数インタフェース仕様

6.1.1 ファイル記述子の解放

C 未実装
FORTRAN MQCLOS( INTEGER*2 FD )

C FORTRAN 引数
char * FD ファイル記述子
返値 DATATYPE データ種別

引数で指定されたファイル記述子の割当を解除する。ヘッダの読み書きに一時ファイルを使用していた場合には、そのファイルは削除される。該当するファイル記述子は初期化され、MqOpen()またはMQOPEN()により再割当が可能となる。
ファイルを作成する場合、本関数/サブルーチンの呼び出しによって、ヘッダ用一時ファイルからMQDBフォーマットファイル用のヘッダが作られ、さらにデータが付加されて出力される。

6.1.2 MQDBフォーマットファイルの作成

仕様
void MqCreate( char *, MqAccess *, MqHeader *, double * )
引数
char * 出力ファイル名
MqAccess * アクセス制御変数
MqHeader * ヘッダ情報を格納する構造体
double *実際のデータを格納する構造体

MqAccess構造体及びMqHeader構造体変数の情報に従って、ヘッダ文字列を作成し、double配列に格納されたデータ出力する。出力ファイル名がNULLであった場合には、標準出力にデータが出力される。
MqAccess構造体は、ヘッダのアクセスを制御する。本構造体変数にMQ_NOがセットされていれば、該当するヘッダは作成されない。但しどのような場合においても、先頭行及び「ファイルの作成日時」ヘッダだけは必ず作成される。また、ヘッダ作成中にエラーが起こった場合、そのエラー以降はヘッダの作成は行なわれない。なお、ヘッダの作成は「終了レコード」ヘッダを除き、ヘッダ文字列のアルファベット順に行なわれる。
ヘッダ作成が終了すると、本関数はMqCreData関数を呼び出し、データ部の作成が開始される。データ部は、MqHeader構造体内のFileTypeメンバにセットされた値に従ったフォーマットで作成される。

6.1.3 MQLIBの初期化

仕様
C unsigned short MqInit( char * )
FORTRAN MQINIT( CHARACTER PROGSIGN )

引数
char * プログラム署名
PROGSIGN プログラム署名

返値
実際のデータを格納するdouble型配列へのポインタ
本関数及びサブルーチンは、MQLIBの初期化を行なう。すなわち、本関数/サブルーチンが呼び出されることにより、状況変数(
第5.6節参照)が初期化される。本関数及びサブルーチンは、MQLIBを利用する際にはプログラム初頭で必ず呼び出しておく必要がある。 本関数及びサブルーチンを呼び出すと、状況変数は次のように初期化される。
MQDBフォーマットファイルを作成する場合には、引数として渡されたプログラム署名が用いられる。

6.1.4 ファイル記述子の割り当て

C 未実装
FORTRAN MQOPEN( CHARACTER*2 FILENAME, INTEGER*2 RW, INTEGER*2 IO, INTEGER*2 FD )

C FORTRAN 引数
FILENAME ファイル名
RW ファイルの読み書きのモード
IO オープンするファイル
返値 FD ファイル記述子

MQDBフォーマットファイルの入出力にファイル記述子を割り当て、アクセス用関数が使用できる状態にする。本関数/サブルーチンが呼び出されると、ヘッダの内容が一時ファイルに蓄えられ
(注)、引数に指定されたファイルのオープンのモードでファイルがファイル記述子と結びつけられる。ファイルアクセスが正常に終了すると、ファイル記述子が返される。MQDBフォーマットファイルへのアクセスは、MQOPEN()呼出後は全てファイル記述子によって行なわれる。
(注)共有メモリなどを利用する機能は、今後のライブラリの改訂によって追加される予定である。
入出力に標準入出力を使用する場合には、ファイル名はNULLや空白文字などで構わない(無視される)。RW及びIOは、それぞれ次のように変換される。

C FORTRAN ファイルの読み書きのモード
MQ_READ 1 (読み出し)
MQ_WRITE 2 (書き込み)

C FORTRAN オープンするファイル
MQ_FILE 1 通常のファイル
MQ_STDIN 2 標準入力
MQ_STDOUT 3 標準出力
MQ_STDOUT 4 標準エラー出力

6.1.5 MQDBフォーマットファイルの読み込み

仕様
double MqRead( char *, MqAccess *, MqHeader * )
引数
char * 出力ファイル名
MqAccess * アクセス制御変数
MqHeader * ヘッダ情報を格納する構造体

返値
実際のデータを格納するdouble型配列へのポインタ
char *変数で指定された月震データファイルを読み、ヘッダ情報を MqHeader構造体変数に、データをdouble変数の配列に格納して返値として返す。MqAccess構造体は、ヘッダへのアクセスを制御する。本構造体にMQ_NOがセットされているヘッダについては読みとられない。char *NULLが指定されていれば、標準入力からデータが読みとられる。
本関数はまず、ファイルの最初の 2 文字を読み、MQDBフォーマットファイルかどうかを判断する。但し、その判定によってデータベース用ファイルでないとされた場合でも、プログラムは終了しない。その後、本関数は先頭行、及びヘッダ行の読みとりを行い、ヘッダ行から得られたデータをMqHeader構造体変数に格納する。
ヘッダの読み込みが終了すると、データの読みとりを行ない、得られたデータをdouble *変数に格納する。この格納はチャンネルの順番に行なわれる。すなわち、チャンネル1のデータは配列の0〜n-1番めまでに格納される。チャンネル2のデータは配列のn〜2n-1番めまでに格納される。MqHeaderNumOfDataメンバに適切と思われるデータ個数が設定されている場合には、データ領域は自動的に拡張される。もしメモリの確保に失敗するなどの理由でデータが格納できなかった場合には、NULLが返される。

6.1.6 「チャンネル数」ヘッダの読み込み

C 未実装
FORTRAN MQRC( INTEGER*2 FD, INTEGER*2 CHANNELS )

C FORTRAN 引数
char * FD ファイル記述子
返値 CHANNELS チャンネル数

引数で指定されたファイル記述子に対応する「チャンネル数」ヘッダを読み込み、チャンネル数を返す。

6.1.7 「データフォーマット」ヘッダの読み込み

C 未実装
FORTRAN MQRDF( INTEGER*2 FD, INTEGER*2 DATAFORM )

C FORTRAN 引数
char * FILENAME ファイル記述子
返値 CHANNELS データフォーマット

引数で指定されたファイル記述子に対応する「データフォーマット」ヘッダを読み込み、データフォーマットを表す値を返す。
MQRDF()において、返されるデータフォーマットの値と、実際のデータフォーマットとの対応は、次の表の通りである。なお、ヘッダに不正な値が格納されていた場合には、MQRDFではDATAFORMに 0 が格納される。

C FORTRAN データフォーマット
MQ_OLD 1 "OLD"フォーマット
MQ_NEW 2 "NEW"フォーマット

6.1.8 「データ種別」ヘッダの読み込み

C 未実装
FORTRAN MQRDF( INTEGER*2 FD, INTEGER*2 DATATYPE )

C FORTRAN 引数
char * FD ファイル記述子
返値 DATATYPE データ種別

引数で指定されたファイル記述子に対応する「データフォーマット」ヘッダを読み込み、データフォーマットを返す。返されるデータ種別の値と、実際のデータ種別との対応は、次の表の通りである。なお、ヘッダに不正な値が格納されていた場合には、MQRDT()では DATATYPEに 0 が格納される。

C FORTRAN データ種別
MQ_LP 1 LP (長周期データ)
MQ_SP 2 SP (短周期データ)
MQ_TIDAL 3 TIDAL (潮汐データ)

6.1.9 「終了レコード番号」ヘッダの読み込み

C 未実装
FORTRAN MQRERC( INTEGER*2 FD, INTEGER*2 ENDREC )

C FORTRAN 引数
char * FILENAME ファイル記述子
返値 ENDREC 終了レコード番号

引数で指定されたファイル記述子に対応する「終了レコード番号」ヘッダを読み込み、終了レコード番号の値を返す。

6.1.10 「ファイル種別」ヘッダの読み込み

C 未実装
FORTRAN MQRFT( INTEGER*2 FD, INTEGER*2 FILETYPE )

C FORTRAN 引数
char * FD ファイル記述子
返値 FILETYPE ファイル種別

引数で指定されたファイル記述子に対応する「ファイル種別」ヘッダを読み込み、ファイル種別を返す。
返されるファイル種別の値と、実際のファイル種別との対応は、次の表の通りである。なお、ヘッダに不正な値が格納されていた場合には、MQRFT()では FILETYPE に0 が格納される。

C FORTRAN ファイル種別
MQ_FULLTEXT 1 フルテキスト形式
MQ_COMPOSITE 2 バイナリ混在形式
MQ_XDR 3 XDR形式

6.1.11 「データ個数」ヘッダの読み込み

C 未実装
FORTRAN MQRNOD( INTEGER*2 FD, INTEGER*4 NOD )

C FORTRAN 引数
char * FD ファイル記述子
返値 NOD データ個数

引数で指定されたファイル記述子に対応する「データ個数」ヘッダを読み込み、データ個数を返す。

6.1.12 「観測モード」ヘッダの読み込み

C 未実装
FORTRAN MQROM( INTEGER*2 FD, INTEGER*2 OBSMODE )

C FORTRAN 引数
char * FD ファイル記述子
返値 CHANNELS 観測モード

引数で指定されたファイル記述子に対応する「観測モード」ヘッダを読み込み、観測モードを表す値を返す。
返される観測モードの値と、実際の観測モードの対応は、次の表の通りである。なお、ヘッダに不正な値が格納されていた場合には、MQROM()では OBSMODE に0 が格納される。

C FORTRAN 観測モード
MQ_PEAKED 1 PEAKED MODE
MQ_FLAT 2 FLAT MODE

6.1.13 「観測点」ヘッダの読み込み

C 未実装
FORTRAN MQRSTN( INTEGER*2 FD, INTEGER*2 STATION )

C FORTRAN 引数
char * FD ファイル記述子
返値 STATION 観測点番号

引数で指定されたファイル記述子に対応する「観測点」ヘッダを読み込み、観測点番号の値を返す。

6.1.14 「開始レコード番号」ヘッダの読み込み

C 未実装
FORTRAN MQRSRC( INTEGER*2 FD, INTEGER*2 STARTREC )

C FORTRAN 引数
char * FD ファイル記述子
返値 STARTREC 開始レコード番号

引数で指定されたファイル記述子に対応する「開始レコード番号」ヘッダを読み込み、開始レコード番号の値を返す。

6.1.15 「データ開始時刻」ヘッダの読み込み

C 未実装
FORTRAN MQRST( INTEGER*2 FD, INTEGER*2 YEAR, INTEGER*2, DAY, INTEGER*2 HOUR, INTEGER*2 MINUTE, INTEGER*2 SECOND, INTEGER*2 MS )

C FORTRAN 引数
char * FD ファイル記述子
返値 開始レコード番号を格納したMqTime構造体
YEAR 年(西暦)
DAY 日(365日単位)
HOUR 時(24時間単位)
MINUTE
SECOND
MS ミリ秒

引数で指定されたファイル記述子に対応する「データ開始時刻」ヘッダを読み込み、データ開始時刻の年、日、字、分、秒、ミリ秒の値を返す。

6.1.16 「テープ番号」ヘッダの読み込み

[注意]C言語用インタフェースは未実装
C 未実装
FORTRAN MQRTN( INTEGER*2 FD, INTEGER*4 TAPE )

C FORTRAN 引数
char * FD ファイル記述子
返値 TAPE テープ番号

引数で指定されたファイル記述子に対応する「テープ番号」ヘッダを読み込み、テープ番号の値の値を返す。

6.2 中位関数インタフェース仕様

6.2.1 「平均振幅」ヘッダの読み込み

仕様
MqAmp MqGetAveAmp( char * )
引数
char *ヘッダ文字列

返値
平均振幅
ヘッダ文字列から「平均振幅」ヘッダを探し、データ文字列中のコンマ数を元にチャンネル数を判断し、必要なデータを切り出した上でMqAmp変数に格納して返す。

6.2.2 「チャンネル数」ヘッダの読み込み

仕様
unsigned short MqGetChannels( char * )
引数
char *ヘッダ文字列

返値
チャンネル数
ヘッダ文字列から「チャンネル数」ヘッダを探し、情報文字列を切り出してチャンネル数に相当する数字を返す。

6.2.3 「データフォーマット」ヘッダの読み込み

仕様
MqFormat MqGetDataFormat( char * )
引数
char *ヘッダ文字列

返値
データフォーマットを表す変数。
「データフォーマット」ヘッダを探し、該当するデータフォーマットを読み出してそれをMqFormat変数として返す。

6.2.4 「データ種別」ヘッダの読み込み

仕様
MqType MqGetDataType( char * )
引数
char *ヘッダ文字列

返値
データ種別を表す変数
「データ種別」ヘッダを探し、該当するデータ種別を読みだし、それをMqType変数として返す。

6.2.5 「終了レコード番号」ヘッダの読み込み

仕様
unsigned long MqGetEndRecord( char * )
引数
char *ヘッダ文字列

返値
終了レコードを表す数字
「終了レコード番号」ヘッダを探し、情報文字列を数字に変換して返す。

6.2.6 ヘッダ文字列の切り出し

仕様
char * MqGetHeader( FILE * )
引数
char *入力ファイル記述子

返値
処理後のヘッダ文字列
入力ファイルからヘッダ部分を読みだし、コメント、空白部分などを削除し、ヘッダだけになった文字列を返す。正常にヘッダ文字列を切り出せなかった場合には NULLが返される。

6.2.7 「最大振幅」ヘッダの読み込み

仕様
MqAmp MqGetMaxAmp( char * )
引数
char *ヘッダ文字列

返値
最大振幅
ヘッダ文字列から「最大振幅」ヘッダを探し、データ文字列中のコンマ数を元にチャンネル数を判断し、必要なデータを切り出した上でMqAmp変数に格納して返す。

6.2.8 「データ個数」ヘッダの読み込み

仕様
unsigned long MqGetNumOfData( char * )
引数
char *ヘッダ文字列

返値
データ個数を表す数字
「データ個数」ヘッダを探し、情報文字列を数字に変換して返す。

6.2.9 「観測モード」ヘッダの読み込み

仕様
MqMode MqGetObsMode( char * )
引数
char *ヘッダ文字列

返値
観測モードを表す変数
「観測モード」ヘッダを読み込み、情報文字列から観測モードを読みだし、MqMode変数の形で返す。

6.2.10 「元のデータファイル名」ヘッダの読み込み

仕様
void MqGetOrgFile( char *, char * )
引数
char *ヘッダ文字列
char *元のファイル名

「元のデータファイル名」ヘッダを読み込み、情報文字列を元のデータファイル名として返す。

6.2.11 「サンプリング間隔」ヘッダの読み込み

仕様
MqAmp MqGetSampRate( char * )
引数
char *ヘッダ文字列

返値
サンプリング間隔
ヘッダ文字列から「サンプリング間隔」ヘッダを探し、データ文字列中のコンマ数を元にチャンネル数を判断し、必要なデータを切り出した上でMqAmp変数に格納して返す。

6.2.12 「開始レコード番号」ヘッダの読み込み

仕様
unsigned long MqGetStartRecord( char * )
引数
char *ヘッダ文字列

返値
開始レコード番号を表す変数
「開始レコード番号」ヘッダを探し、情報文字列を数字に変換して返す。

6.2.13 「データのスタート時刻」ヘッダの読み込み

仕様
MqTime MqGetStartTime( char * )
引数
char *ヘッダ文字列

返値
データのスタートする時刻
「データのスタート時刻」ヘッダを探し、情報文字列を数字に変換して返す。

6.2.14 「観測ステーション」ヘッダの読み込み

仕様
unsigned short MqReaStation( char * )
引数
char *ヘッダ文字列

返値
観測ステーションを表す数字
「観測ステーション」ヘッダを探し、情報文字列を数字に変換して返す。

6.2.15 「テープ番号」ヘッダの読み込み

仕様
unsigned short MqGetTapeNumber( char * )
引数
char *ヘッダ文字列

返値
テープ番号を表す変数
「テープ番号」ヘッダを探し、情報文字列を数字に変換して返す。

6.2.16 先頭行の読み込み

仕様
MqLibInfo MqGetTopLine( FILE * )
引数
FILE *入力ファイルのファイル記述子

返値
ライブラリ情報構造体
指定された入力ファイルから先頭行を読み、指定されたファイルがMQDBフォーマットであるかどうかを判断する。もしMQDBフォーマットであると判断された場合には、ライブラリ番号、プログラム署名を読み出す。この判断は、先頭2文字が @@ であるかどうかで行なう。もしMQDBフォーマットでない場合には、バージョン番号は全て 0 となり、プログラム署名の変数には NULLが返される。

6.2.17 「平均振幅」ヘッダ文字列の作成

仕様
char * MqPutAveAmp( MqAmp )
引数
MqAmp
平均振幅

返値
「平均振幅」ヘッダ文字列へのポインタ
「平均振幅」ヘッダ用の文字列を作成する。

6.2.18 「チャンネル数」ヘッダ文字列の作成

仕様
char * MqCreChannels( unsigned short )
引数
unsigend short
観測モード

返値
「チャンネル数」ヘッダ文字列へのポインタ
「チャンネル数」ヘッダ文字列を作成する。

6.2.19 「データ作成日時」ヘッダ文字列の作成

仕様
void MqPutCreateDate( void )
引数
char *ヘッダ文字列

「データ作成日時」ヘッダ用の文字列を作成する。本関数は、MqCreate()内では自動的に呼び出される。

6.2.20 データ部の作成

仕様
void MqPutData( FILE *, double *, MqHeader * )
引数
FILE * double * MqHeader *
ファイル構造体
データ
ヘッダ構造体

データ部を作成する。MqHeader構造体変数に格納されているチャンネル数とデータ数の情報を用いて、データの行数を決定した後、チャンネル数に応じてデータを出力する。FILE構造体がNULLであれば、出力は標準出力に対して行なわれる。それ以外の場合には、FILE構造体変数で指定されるファイルに対して出力される。

6.2.21 「データフォーマット」ヘッダ文字列の作成

仕様
char * MqPutDataFormat( MqFormat )
引数
char *ヘッダ文字列

返値
「データフォーマット」ヘッダ文字列へのポインタ
MqFormat構造体変数の内容に従い、「データフォーマット」ヘッダ用の文字列を作成する。

6.2.22「データ種別」ヘッダの作成

仕様
char * MqPutDataType( MqType )
引数
MqType
月震のデータ種別

返値
「データ種別」ヘッダ文字列へのポインタ
MqType構造体変数の内容に従って、「データ種別」ヘッダ用の文字列を作成する。

6.2.23 「終了レコード番号」ヘッダ文字列の作成

仕様
char * MqPutEndRecord( unsigned long )
引数
unsigned long
終了レコード番号

返値
「終了レコード番号」ヘッダ文字列へのポインタ
引数として受けとったレコード番号から、「終了レコード番号」ヘッダ用の文字列を作成する。

6.2.24 「最大振幅」ヘッダ文字列の作成

仕様
char * MqPutMaxAmp( MqAmp )
引数
MqAmp
最大振幅

返値
「最大振幅」ヘッダ文字列へのポインタ
「最大振幅」ヘッダ用の文字列を作成する。MqAmp変数の内容を文字列化して、ヘッダ文字列に付加する。

6.2.25 「データ個数」ヘッダ文字列の作成

仕様
char * MqPutNumOfData( unsigned long )
引数
unsigned long
char *ヘッダ文字列
データ個数

返値
「データ個数」ヘッダ文字列へのポインタ
「データ個数」ヘッダ用の文字列を作成する。

6.2.26 「観測モード」ヘッダ文字列の作成

仕様
char * MqPutObsMode( MqMode )
引数
MqMode
観測モード

返値
「観測モード」ヘッダ文字列へのポインタ
「観測モード」ヘッダ用の文字列を作成する。

6.2.27 「元のデータファイル名」ヘッダ文字列の作成

仕様
char * MqPutOrgFile( char * )
引数
char *元のデータファイル名

返値
「元のデータファイル名」ヘッダ文字列へのポインタ
「元のデータファイル名」ヘッダ用文字列を作成する。

6.2.28 「サンプリング間隔」ヘッダ文字列の作成

仕様
char * MqPutSampRate( MqAmp )
引数
MqAmp
サンプリング間隔

返値
「サンプリング間隔」ヘッダ文字列へのポインタ
「サンプリング間隔」ヘッダ用の文字列を作成する。MqAmp変数の内容を文字列化して、ヘッダ文字列に付加する。

6.2.29 「開始レコード番号」ヘッダの作成

仕様
char * MqPutStartRecord( unsigned long )
引数
unsigned long開始レコード番号

返値
「開始レコード番号」ヘッダ文字列へのポインタ
引数として受けとったレコード番号から、「開始レコード番号」ヘッダ用の文字列を作成する。

6.2.30 「データのスタート時刻」ヘッダ文字列の作成

仕様
char * MqPutStartTime( MqTime )
引数
MqTime
データのスタート時刻を格納した構造体

返値
「データのスタート時刻」ヘッダ文字列へのポインタ
「データのスタート時刻」ヘッダ用の文字列を作成する。

6.2.31 「観測ステーション」ヘッダ文字列の作成

仕様
char * MqPutStation( unsigned short )
引数
unsigned short
観測点の番号を格納した変数(12〜16)

返値
「観測ステーション」ヘッダ文字列へのポインタ
「観測ステーション」ヘッダ用の文字列を作成する。

6.2.32 「テープ番号」ヘッダ文字列の作成

仕様
void MqPutTapeNumber( unsigned short )
引数
unsigned short
テープの番号を格納した変数

返値
「テープ番号」ヘッダ文字列へのポインタ
「テープ番号」ヘッダ用文字列を作成する。

6.2.33 先頭行文字列の作成

仕様
void MqPutTopLine( char *header, char *progsign )
引数
char *headerヘッダ文字列
char *progsignプログラム署名

先頭行として利用できる文字列を作成し、*headerにセットする。ライブラリのバージョンは、状況変数MqLibVersionよりとられる。従って、本関数の実行前に、必ずMqInit()関数を実行しておかなくてはならない。

6.3 下位関数インタフェース仕様

6.3.1 ヘッダ文字列の作成

仕様
char * MqCatInfoData( char *, char * )
引数
char *情報文字列
char *データ文字列

返値
ヘッダ文字列
情報文字列とデータ文字列の間に分離記号 : を加え、ヘッダ文字列を作成して返値として返す。もし作成中にエラーが発生した場合には、NULL が返される。

6.3.2 エラー番号のクリア

仕様
void MqClearError( void )
エラー番号をクリアする。ほとんどのMQLIB関数では、最初にこの関数が呼び出されている。なお、本関数はマクロとして実現されており、実際の形は

MqErr.errno = 255


である。

6.3.3 文字列からdouble型配列への変換

仕様
void MqConvCharDouble( char *, MqAmp * )
引数
char * 文字列
MqAmp * 文字列から変換されたdouble型データを収めるための変数。

文字列中のセパレータ , の位置を調べ、それを元にしてセパレータで区切られた数値列をdouble型の配列とみなし、変換して格納する。

6.3.4 セパレータ数のカウント

仕様
unsigned short MqCountSeparator( unsigned short, char * )
引数
unsigned short 分離記号を表す文字 1 文字。
char * ヘッダ文字列

返値
捜し出された分離記号の数。
セパレータを文字列 char * 変数中から探し、その数を返す。

6.3.5 ヘッダ文字列からの1行の切り出し

仕様
void MqCutLine( char *, char *, long )
引数
char * ヘッダ文字列
char * 切り出された1行
long 行の先頭の位置

long変数に格納されたヘッダ行の先頭の情報に基づき、そこから改行を表す部分までを複写し、C言語で表される文字列の形、すなわち最後に'\'が付加された文字列の形として返す。long変数はポインタではなくて、文字列の先頭から数えた該当するヘッダまでの文字数と考えれば良い。

6.3.6 コメントの先頭文字かどうかを判断

仕様
void MqIsComStart( int )
引数
int チェックしたい文字

返値
先頭文字であればMQ_TRUE、そうでなければMQ_FALSE
intで示される文字がコメントの先頭文字として有効かどうかを判断し、有効であればMQ_TRUE、そうでなければMQ_FALSEを返す。なお、MQ_TRUE及びMQ_FALSEはいずれもマクロ定義された変数である。また、本関数はマクロによって実現されている。

6.3.7 行末記号の出力

仕様
void MqPutLineEnd( char * )
引数
char * ヘッダ文字列
引数であるヘッダ文字列の最後に行末記号( CR + NL )を付加する。なお、この関数はマクロによって実現されており、実際の形は、

strcat( x, MqLineEnd )


である。

6.3.8 ヘッダ用一時ファイルの読み込み

仕様
char * MqGetdTmpFile( unsigned short )
引数
unsigned short ファイル記述子

返値
読み込まれたヘッダ用一時ファイルの内容を含む文字列
本関数は、MqOpen()あるいはMQOPEN()関数/サブルーチンによって作成された、ヘッダ用一時ファイルを読み込む。読み込まれるファイルは、引数で指定されたファイル記述子に対応する一時ファイルである。ファイルの読み込みに成功すると、その内容が char *型変数として読み込まれ、返値として返される。もし読み込み中にエラーが発生した場合には、NULLが返される。

6.3.9 情報文字列の検索

仕様
long MqSearchHeader( char *, char * )
引数
char *ヘッダ文字列
char *情報文字列
ヘッダ文字列内で情報文字列を検索し、その位置をlong変数として返す。もし、文字列が見つからなかったり、エラーが発生した場合には、-1 が返される。

6.3.10 情報文字列とデータ文字列の分離

仕様
void MqSeparateInfoData( char *, char * )
引数
char *ヘッダ文字列
char *データ文字列
情報文字列とデータ文字列の分離記号:を頼りにデータ文字列をヘッダ文字列全体から分離する。

6.3.11 文字列からMqTime構造体変数への変換

仕様
MqTime MqSeparateMqTime( char * )
引数
char *データ文字列
本関数は、数字が次のような形で並んでいる文字列を、MqTime構造体変数へ変換する。各文字列は、65536以下の自然数でなければならない。各文字列が表現する数値の許容範囲は、MqTime構造体による許容範囲と同じである。

year day hour minute second ms
(例)
1972 223 22 10 43 34

6.3.12 エラー番号のセット

仕様
void MqSetError( unsigned long )
引数
unsigned longエラー番号

エラー番号をセットする。この関数はマクロとして実現されており、実際の形は

MqErr.errno = x


である。xは引数である。

6.3.13 ファイル記述子のセット

仕様
short MqSetFilDesc( char *, MQRW, MQIO );
引数
char * ファイル名
MQRW ファイルの読み書きのモード
MQIO オープンするファイル
返値
ファイル記述子
ファイル記述子を、引数に与えられたモード値でセットする。本関数が呼び出されると、まず未使用の最も若い番号のファイル記述子が探され、もし見つかれば(見つからなければエラーとなる)、そのファイル記述子に、引数で与えられた読み書きのモード、ファイル入出力の種類がセットされ、全て正しくセットされれば、ファイル記述子を表す数字が返値として返される。もし途中でエラーが発生した場合には、-1 が返される。

6.3.14 関数番号のセット

仕様
void MqSetFunc( unsigned long )
引数
unsigned long 関数番号
関数番号をセットする。この関数はマクロとして実現されており、実際の形は

MqErr.func = x


である。xは引数である。

6.4 ユーティリティ関数

6.4.1 平均振幅の計算

仕様
double MqCalcAveAmp( double *, unsigned long start, unsigned long num )
引数
double *実際のデータ
unsigned long計算を開始するデータ点
unsigned long計算するデータ数

返値
平均振幅
double *型配列で示されるデータのstartで示される箇所から、num個のデータについて平均値を計算する。

6.4.2 最大振幅の計算

仕様
double MqCalcMaxAmp( double *, unsigned long start, unsigned long num )
引数
double *実際のデータ
unsigned long計算を開始するデータ点
unsigned long計算するデータ数

返値
最大振幅
double *型配列で示されるデータのstartで示される箇所から、num個のデータについて最大振幅を探し出す。

6.4.3 データベース用ファイル名の作成

仕様
char * MqCreFileName( unsigned short, MqTime, MQDT )
引数
unsigned short観測点番号
MqTimeデータ開始時刻
MQDT月震データの種別

返値
作成されたファイル名
引数として渡された観測点番号、データ開始時刻、データ種別を元にして、月震データベース用のファイル名を作成する。各引数の内容は、MqRead()、あるいはMqReadStation()MqReadStartTime()MqReadDataType()などから得ることができる。引数が不正であった場合、例えば、観測点番号が11以下17以上であったり、MqTime構造体の中に時刻として不適当な値が代入されていた場合などには、ファイル名は作成されず、NULLが返される。それ以外の場合には、月震データベース既約に基づいたファイル名が返される。但し、ファイル名の第8文字については、必ず0となっているので、データベースの規約に合わせるためには、MQLIBのファイルをインストールするプログラムで、適切な名前に変換する必要がある。

6.4.4 MqFilDesc変数の整合性チェック

仕様
void MqCheckFilDesc( unsigned short, MQRW )
引数
unsigned shortチェックを行なうファイル記述子
MQRWファイルがオープンされているモード(読み出しか書き出しか)

引数として渡されたファイル記述子の内容について、正しい内容が書き込まれているかどうかチェックを行なう。渡されたファイル記述子がMQFILDESCMAX以上の値であったり、使用されていないファイル記述子であった場合にはエラーとなる。また、該当するファイル記述子にセットされているファイルのオープンのモード(MQRW変数)と、引数として渡されたMQRW変数のオープンのモードが異なる場合にもエラーとなる。もちろん、MQRWとして不正な値がセットされている場合にもエラーとなる。

6.4.5 MqLibVer構造体の内容の判定

仕様
void MqCheckLibVer( MqLibVer )
引数
MqLibVerライブラリ情報を格納した変数

MqLibVer構造体に格納した変数がMQDBの規約に合致しているかどうかを判定する。もし合致していなければ、MqErr構造体に違反内容に会わせたエラー番号が格納される。規約に合っていれば、MqErr.errnoにはEMQNOERRORが格納される。

6.4.6 観測モードの判定

仕様
MqMode MqCheckObsMode( MqTime, unsigned short )
引数
MqTimeデータのスタート時刻
unsigned short観測点を表す数値

返値
観測モード
MqTime変数に格納されているデータのスタート時刻と観測点の番号から、そのデータがpeakedモードで観測されていたかflatモードで観測されていたかを判別し、その値を返す。

6.4.7 サンプリング間隔の生成

仕様
double MqCheckSampRate( MQDT )
引数
MQDT月震のデータ種類

返値
サンプリング間隔
月震のデータ種別に応じて、サンプリング間隔の値を返す。

6.4.8 観測点番号のチェック

仕様
void MqCheckStation( unsigned short )
引数
MqTime *チェックされる変数

unsigned short変数の内容が、アポロの観測点番号として妥当な値かどうか、すなわち、12〜16の範囲内にあるかどうかを調べる。もしその範囲内にない場合には、それに応じたエラー値がグローバル変数 MqErrにセットされる。

6.4.9 MqTime変数の内容のチェック

仕様
void MqCheckTime( MqTime * )
引数
MqTime *チェックされる変数

MqTime変数の内容をチェックし、妥当な値が各変数に代入されているかどうかをチェックする。もし代入されていない場合には、それに応じたエラー値がグローバル変数 MqErrにセットされる。

6.4.10 2つのMqTime変数の時間差の出力

仕様
double MqDiffTime( MqTime time2, Mqtime time1 )
引数
MqTime *time2引かれる時間
MqTime *time1引く時間

返値
マイクロ秒単位で計算した時間差
2つのMqTime変数の時間差、time2 - time1を計算し、マイクロ秒単位の時間差を返す。

6.4.11 エラーメッセージの出力

仕様
void MqPerror( char * )
引数
char *エラー文字列

エラー構造体MqErrorにセットされたエラー内容を解釈し、エラーメッセージを出力する。また、もしエラーレベルが EMQ_FATAL であった場合には、後述するエラーメッセージ出力後に、プログラムを終了する。
本関数により出力されるエラーメッセージは、次のような形となる。

MQLIB error ( level LEVEL ) at func FUNC:
エラーメッセージ


ここで、LEVELはエラーのレベルを示し、FUNCはエラーが発生した関数を表す。
エラーメッセージは、もし引数*errstrNULLでなければ、次のような形となる。

[*errstrで表されたメッセージ]: [必要なエラーメッセージ]


もし *errstrNULLであれば、エラーメッセージは次のようになる。

[必要なメッセージ]


6.4.12 MqAccess変数を全てMQ_YESにセット

仕様
void MqSetAccessYes( MqAccess * )
引数
MqAccess *アクセス制御変数

引数のMqAccess変数を全てMQ_YESにセットする。本関数は、全てのヘッダを読み出したり、全てのヘッダを作成する場合に利用できる。

6.4.13 MqAccess変数を全てMQ_NOにセット

仕様
void MqSetAccessNo( MqAccess * )
引数
MqAccess *アクセス制御変数

引数のMqAccess変数を全てMQ_NOにセットする。本関数を利用することにより、特定のヘッダだけを作成したり、読み出したりすることができる。すなわち、この関数を呼んだ後に、必要なヘッダにだけMQ_YESをセットすることにより特定ヘッダへのアクセスを実現させるために用いることが可能である。

6.4.14 エラー出力レベルの制御

仕様
void MqSetWarnLevel( unsigned short )
引数
unsigned shortエラー出力レベル

引数のエラー出力レベル以上のエラーでのみエラーメッセージが出力されるように、エラー構造体を変更する。なお、引数はなるべくマクロで与えるようにすべきである。以下の引数を与えることが可能である。これ以外の数値を与えた場合にはエラーとなり、デフォルト値(EMQ_WARNING)がセットされる。

引数 動作
EMQ_NOTICE NOTICEレベルを含む、全エラーのメッセージを出力する。
EMQ_WARNING WARNING以上のレベルでエラーメッセージを出力する。
EMQ_FATAL FATALレベルのエラーの場合のみエラーメッセージを出力する。
EMQ_NOMESSAGE いかなるエラーが発生してもエラーメッセージを出力しない。

▲このページの先頭へ


前の章へ

目次へ

次の章へ
月震ホームページへ
terakinizers!!トップへ