[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 宇治市五ヶ庄