[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000967] Re: msgdmp for CDCL
堀之内です。
> さて、これにより RubyDCL においては、ruby 用のエラーハンドリング
> 関数で置き換えることで、強制終了の憂き目に合わなくて済むようにな
> ります。既にそのためのプログラム改訂も行いましたので(というか、
> 取り替えのテストを RubyDCL で行った)、CDCL のほうがアップデート
> されれば使えるようになります。後でパッチの形で流します。上記の
> CDCL の変更を行ったものがリリースされれば、正式に組み込みたいと
> 思います。
このパッチを添付します。ruby-dcl-1.beta.6 用です。CDCL のほうに
もパッチを当ないと使えませんので御注意を。
なお、CDCL の修正版がリリースされたら正式に取り込みます。そのと
きは、ver.1.0 としたいと思ってます (つまり、これが課題だった)。
*** init.c_old Fri Nov 2 16:04:07 2001
--- init.c Fri Nov 30 20:32:25 2001
***************
*** 58,66 ****
--- 58,85 ----
void init_misc1_randlib(VALUE mDCL);
void init_misc1_timelib(VALUE mDCL);
+ static int ruby_msgdmp_err_func(char *csub, char *cmsg,
+ int csub_len, int cmsg_len)
+ {
+ char cmsgx[200], csubx[32];
+ int lmsg, lsub, i;
+ char msg[300];
+ lsub = lenc_(csub, csub_len);
+ lmsg = lenc_(cmsg, cmsg_len);
+ msg[0]='[';
+ strncpy(msg+1,csub,lsub);
+ msg[lsub+1]=']';
+ msg[lsub+2]=' ';
+ strncpy(msg+lsub+3,cmsg,lmsg);
+ for(i=lsub+3+lmsg;i<300;i++){msg[i]='\0';}
+ rb_raise(rb_eRuntimeError, msg);
+ return(0);
+ }
+
void
Init_dcl()
{
+ set_msgdmp_err_func(ruby_msgdmp_err_func);
mNum = rb_define_module("NumRu");
mDCL = rb_define_module_under(mNum, "DCL");