[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000966] Re: msgdmp for CDCL
堀之内です。
> 前から希望してました CDCL において msgdmp_ を取り替え可能にする
> 件ですが、自分でやりましたので、dcl-5.2C 用のパッチを添付します。
この件の変更内容の説明です。
* 今までの msgdmp_: msgdmp_dclorig と名前付け変え
これをデフォルトの msgdmp 関数とする。つまり、何もしなければ振る
舞いは今までと同じ。なお、引数の型 ftrlen は int に変えた(これ
は取り替え関数を用意する際に tinyf2c.h をインクルードしないでも
良くするため -- 下記参照)。
* 新 msgdmp_ 作成:
これは登録された関数に処理を渡すだけ。
* set_msgdmp_func (新設):
msgdmp 関数 (デフォルト: msgdmp_dclorig) を取り替える。引数(=1
個だけ)で関数のポインターを渡す。プロトタイプは以下:
int (*func)(char *clev, char *csub, char *cmsg,
int clev_len, int csub_len, int cmsg_len)
(オリジナルの msgdmp_ では int でなく ftrlen が使われてい。int
に代えることで、tinyf2c.h のインクルードが不要になる)
* set_msgdmp_err_func (新設):
msgdmp のエラーの時の振る舞いだけ変え、warning や message のとき
は今まで通りにする。引数(=1個だけ)でエラー処理専用の関数のポイ
ンターを与える。デフォルトはなし。プロトタイプは以下:
int (*func)(char *csub, char *cmsg,
int csub_len, int cmsg_len);
エラーでアボートされるのだけ避けるためにはこれが便利。Ruby DCL
でもこれを使います。
以上が、公開関数です。なお、set_msgdmp_err_func のため、
msgdmp_dclorig のエラー処理の部分だけをいじった
msgdmp_err_replaceable というプライベートな関数を用意してます。
パッチが長いのはこのせい。
堀之内 武 horinout@xxxxxx
京都大学宙空電波科学研究センター 611-0011 宇治市五ヶ庄