[#18233] [book] blade.nagaokaut.ac.jp/ruby/ruby-list/ — Shin-ichiro Hara <sinara@...>

原です。

21 messages 1999/11/01
[#18239] [book] csv_split2 [Re: blade.nagaokaut.ac.jp/ruby/ruby-list/] — keiju@... (石塚圭樹) 1999/11/01

けいじゅ@日本ラショナルソフトウェアです.

[#18244] Re: [book] csv_split2 [Re: blade.nagaokaut.ac.jp/ruby/ruby-list/] — Shin-ichiro Hara <sinara@...> 1999/11/01

原です。

[#18289] Re: [book] csv_split2 — Koretsugu Daigoro <tmmcross@...> 1999/11/02

これつぐです。

[#18291] Re: [book] csv_split2 — keiju@... (石塚圭樹) 1999/11/02

けいじゅ@日本ラショナルソフトウェアです.

[#18311] Re: [book] csv_split2 — Koretsugu Daigoro <tmmcross@...> 1999/11/02

これつぐです。

[#18338] オブジェクトの非同一性判定 — Ayanosuke <aya@...>

 綾乃介です。

13 messages 1999/11/03

[#18539] [book] $*, etc. — Yasuhiro Fukuma <yasuf@...>

福間@福岡 です。

44 messages 1999/11/11

[#18580] — tokoma@... (中川 誠)

中川です。

44 messages 1999/11/14
[#18619] build on alpha — Go Nakagawa <nakagawa@...> 1999/11/15

もとの質問のかたとは別の中川です。

[#18737] Re: build on alpha — tokoma@... (中川 誠) 1999/11/18

中川です。

[#19144] Re: build on alpha — tokoma@... (中川 誠) 1999/12/04

中川です。長文で失礼します。

[#19341] Re: build on alpha — tokoma@... (中川 誠) 1999/12/09

中川です。

[#19344] Re: build on alpha — matz@... (Yukihiro Matsumoto) 1999/12/09

まつもと ゆきひろです

[#19400] Re: build on alpha — tokoma@... (中川 誠) 1999/12/10

中川です。

[#19426] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/11

えぐち@エスアンドイー です。

[#19459] Re: build on alpha — tokoma@... (中川 誠) 1999/12/13

中川です。

[#19461] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/13

えぐち@エスアンドイー です。

[#19506] Re: build on alpha — tokoma@... (中川 誠) 1999/12/14

中川です。

[#19520] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/15

えぐち@エスアンドイー です。

[#19522] Re: build on alpha — matz@... (Yukihiro Matsumoto) 1999/12/15

まつもと ゆきひろです

[#19543] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/15

えぐち@エスアンドイー です。

[#19562] Re: build on alpha — tokoma@... (中川 誠) 1999/12/15

中川です。

[#19569] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/16

えぐち@エスアンドイー です。

[#19592] Re: build on alpha — tokoma@... (中川 誠) 1999/12/16

中川です。

[#18637] constant? — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

20 messages 1999/11/16
[#18640] Re: constant? — WATANABE Hirofumi <Hirofumi.Watanabe@...> 1999/11/16

わたなべです.

[#18650] Re: constant? — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/16

もりきゅうです。

[#18657] Re: constant? — matz@... (Yukihiro Matsumoto) 1999/11/16

まつもと ゆきひろです

[#18709] ADO にて datetime 型の取得 — Takashi SHIODA <tsio@...>

塩田です。

18 messages 1999/11/18
[#18779] Re: ADO にて datetime 型の取得 — Masaki Suketa<CQN02273@...> 1999/11/20

助田です.

[#18802] Re: ADO にて datetime 型の取得 — Takashi SHIODA <tsio@...> 1999/11/21

オレンジソフト塩田です。

[#18712] Re: header output in eruby — TAKEUCHi Kahori <take-k@...>

たけうちです。

16 messages 1999/11/18
[#18716] Re: header output in eruby — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/11/18

なひです.

[#18830] mod_ruby-0.1.4 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

16 messages 1999/11/22

[#18853] initializer polymorphism? — Takeyuki Watadani <watadani@...>

渡谷といいます。

25 messages 1999/11/23

[#18911] Re: eRuby 変換後の無駄 (?) な改行 — TAKEUCHi Kahori <take-k@...>

たけうちです。

14 messages 1999/11/25

[#18914] Ruby standard GUI framework? — Hideto ISHIBASHI <s34204@...>

石橋秀仁です。

43 messages 1999/11/25
[#18975] Re: Ruby standard GUI framework? — 中村暁史 Nakamura Akifumi <BXQ04723@...> 1999/11/27

[#19020] Re: Ruby standard GUI framework? — Hideto ISHIBASHI <s34204@...> 1999/11/29

石橋秀仁です。

[#19026] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/11/29

[#19081] Re: Ruby standard GUI framework? — "Hideaki Takata" <hideakit@...3.dion.ne.jp> 1999/12/01

たかたです。

[#19092] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/12/01

[#19112] Re: Ruby standard GUI framework? — 中村暁史 Nakamura Akifumi <BXQ04723@...> 1999/12/02

[#19131] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/12/03

[#18948] 他言語との比較 — とみたまさひろ <tommy@...>

とみたです。

18 messages 1999/11/26

[ruby-list:18412] Re: Is there ext/GD for gd-1.7.x

From: Noritsugu Nakamura <nnakamur@...>
Date: 1999-11-04 13:52:37 UTC
List: ruby-list #18412
中村 のりつぐ です。

In article <19991104123734W.msato@iis.u-tokyo.ac.jp> 
Masahiro SATO <m@sa.to> wrote:
> > どこかに Ruby 1.4と gdの最近の版に対応した ext/GDってあるのでしょうか?
> 
>   [ruby-ext:450] がそうだと思います. [ruby-ext:451] も御覧下さい.

フォローありがとうございます。
[ruby-ext:00450] patch for GD-0.6.2
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-ext/450
で私がパッチを流しました。

GD 拡張ライブラリの作者であらせられる
まつもとさんからパッケージにしてねと言われたのですが、
[ruby-ext:00450] にも書いた問題が解決できなかったので、
ほっとかれています。すいません。

おまけに、一部 ArgError を rb_raise(rb_eArgError, でなく
rb_raise(rb_eTypeError, に間違えて変更していたようです。
# rename.rb を使わなかったからだ!

ということで、もう一度パッチを最後に付けます。
(ruby-list にパッチを流すのは気が引けるのですが…)

[ruby-ext:00450]のパッチでは、png を使用するには手で
-DGD_PNG を付けなければいけなかったのですが、ruby 本の
p.445 によると have_func(func) では HAVE_FUNC という
マクロ変数が定義されるらしいので、それを使用することに
しました。have_func("gdImagePng") で

ruby 本だけでは、extconf.rb の正しい記述方法が
理解できなかったので、私には作れませんでした。
多分以下のような FLAG ができるように記述するのでしょうが。


gif バージョンの gd がある
  DLDFLAGS, LIBS += -lgd -lm
  VFlib が同時にリンクされている
    DLDFLAGS, LIBS += -lgd -lVFlib -lm
png バージョンの gd がある
  CFLAGS += -DHAVE_GDIMAGEPNG
  DLDFLAGS, LIBS += -lgd -lm -lz -lpng
  ttf が同時にリンクされている
    CFLAGS += -DHAVE_GDIMAGEPNG
    DLDFLAGS, LIBS += -lgd -lm -lz -lpng -lttf ???

# 依存関係があるライブラリについても簡単に
# 書けるようになるといいなあ〜 > mkmf

--- GD.c.org	Sat May  8 22:01:05 1999
+++ GD.c	Thu Nov  4 22:24:09 1999
@@ -40,7 +40,11 @@
 }
 
 static VALUE
+#ifdef HAVE_GDIMAGEPNG
+img_from_png(class, f)
+#else
 img_from_gif(class, f)
+#endif
     VALUE class, f;
 {
     VALUE img;
@@ -48,11 +52,15 @@
     gdImagePtr iptr;
 
     Check_Type(f, T_FILE); 
-    io_binmode(f);
+    rb_io_binmode(f);
     GetOpenFile(f, fptr);
-    io_readable(fptr);
+    rb_io_check_readable(fptr);
 
+#ifdef HAVE_GDIMAGEPNG
+    iptr = gdImageCreateFromPng(fptr->f);
+#else
     iptr = gdImageCreateFromGif(fptr->f);
+#endif
     return Data_Wrap_Struct(class,0,free_img,iptr);
 }
 
@@ -65,9 +73,9 @@
     gdImagePtr iptr;
 
     Check_Type(f, T_FILE); 
-    io_binmode(f);
+    rb_io_binmode(f);
     GetOpenFile(f, fptr);
-    io_readable(fptr);
+    rb_io_check_readable(fptr);
 
     iptr = gdImageCreateFromGd(fptr->f);
     return Data_Wrap_Struct(class,0,free_img,iptr);
@@ -82,9 +90,9 @@
     gdImagePtr iptr;
 
     Check_Type(f, T_FILE); 
-    io_binmode(f);
+    rb_io_binmode(f);
     GetOpenFile(f, fptr);
-    io_readable(fptr);
+    rb_io_check_readable(fptr);
 
     iptr = gdImageCreateFromXbm(fptr->f);
     return Data_Wrap_Struct(class,0,free_img,iptr);
@@ -195,18 +203,18 @@
     VALUE img, idx;
 {
     gdImagePtr im;
-    VALUE ary = ary_new2(3);
+    VALUE ary = rb_ary_new2(3);
     int i, c;
 
     Data_Get_Struct(img, gdImage, im);
     i = NUM2INT(idx);
 
     c = gdImageRed(im, i);
-    ary_push(ary, INT2FIX(c));
+    rb_ary_push(ary, INT2FIX(c));
     c = gdImageGreen(im, i);
-    ary_push(ary, INT2FIX(c));
+    rb_ary_push(ary, INT2FIX(c));
     c = gdImageBlue(im, i);
-    ary_push(ary, INT2FIX(c));
+    rb_ary_push(ary, INT2FIX(c));
 
     return ary;
 }
@@ -228,8 +236,8 @@
 image_req(img)
     VALUE img;
 {
-    if (!obj_is_kind_of(img, cImage)) {
-	TypeError("GD::Image required");
+    if (!rb_obj_is_kind_of(img, cImage)) {
+	rb_raise(rb_eTypeError, "GD::Image required");
     }
 }
 
@@ -336,8 +344,8 @@
 poly_req(ply)
     VALUE ply;
 {
-    if (!obj_is_kind_of(ply, cPolygon) || TYPE(ply) != T_ARRAY) {
-	TypeError("GD::Polygon required");
+    if (!rb_obj_is_kind_of(ply, cPolygon) || TYPE(ply) != T_ARRAY) {
+	rb_raise(rb_eTypeError, "GD::Polygon required");
     }
 }
 
@@ -461,8 +469,8 @@
 font_req(fnt)
     VALUE fnt;
 {
-    if (!obj_is_kind_of(fnt, cFont)) {
-	TypeError("GD::Font required");
+    if (!rb_obj_is_kind_of(fnt, cFont)) {
+	rb_raise(rb_eTypeError, "GD::Font required");
     }
 }
 
@@ -514,7 +522,7 @@
 
     if (TYPE(ch) == T_STRING) {
 	if (RSTRING(ch)->len != 1) {
-	    ArgError("string must be 1 byte(%d bytes)", RSTRING(ch)->len);
+	    rb_raise(rb_eArgError, "string must be 1 byte(%d bytes)", RSTRING(ch)->len);
 	}
 	ci = RSTRING(ch)->ptr[0];
     }
@@ -540,7 +548,7 @@
 
     if (TYPE(ch) == T_STRING) {
 	if (RSTRING(ch)->len != 1) {
-	    ArgError("string must be 1 byte(%d bytes)", RSTRING(ch)->len);
+	    rb_raise(rb_eArgError, "string must be 1 byte(%d bytes)", RSTRING(ch)->len);
 	}
 	ci = RSTRING(ch)->ptr[0];
     }
@@ -560,9 +568,9 @@
 
     Data_Get_Struct(img, gdImage, im);
     if (gdImageGetInterlaced(im)) {
-	return TRUE;
+	return Qtrue;
     }
-    return FALSE;
+    return Qfalse;
 }
 
 static VALUE
@@ -581,14 +589,14 @@
     VALUE img;
 {
     gdImagePtr im;
-    VALUE ary = ary_new2(2);
+    VALUE ary = rb_ary_new2(2);
     int i;
 
     Data_Get_Struct(img, gdImage, im);
     i = gdImageSX(im);
-    ary_push(ary, INT2FIX(i));
+    rb_ary_push(ary, INT2FIX(i));
     i = gdImageSY(im);
-    ary_push(ary, INT2FIX(i));
+    rb_ary_push(ary, INT2FIX(i));
 
     return ary;
 }
@@ -618,7 +626,11 @@
 }
 
 static VALUE
+#ifdef HAVE_GDIMAGEPNG
+img_png(img, out)
+#else
 img_gif(img, out)
+#endif
     VALUE img, out;
 {
     gdImagePtr im;
@@ -627,12 +639,16 @@
 
     Data_Get_Struct(img, gdImage, im);
     Check_Type(out, T_FILE); 
-    io_binmode(out);
+    rb_io_binmode(out);
     GetOpenFile(out, fptr);
-    io_writable(fptr);
+    rb_io_check_writable(fptr);
     f = (fptr->f2) ? fptr->f2 : fptr->f;
 
+#ifdef HAVE_GDIMAGEPNG
+    gdImagePng(im, f);
+#else
     gdImageGif(im, f);
+#endif
 
     return img;
 }
@@ -647,9 +663,9 @@
 
     Data_Get_Struct(img, gdImage, im);
     Check_Type(out, T_FILE); 
-    io_binmode(out);
+    rb_io_binmode(out);
     GetOpenFile(out, fptr);
-    io_writable(fptr);
+    rb_io_check_writable(fptr);
     f = (fptr->f2) ? fptr->f2 : fptr->f;
 
     gdImageGd(im, f);
@@ -665,7 +681,7 @@
 ply_new(klass)
     VALUE klass;
 {
-    VALUE self = ary_new();
+    VALUE self = rb_ary_new();
 
     RBASIC(self)->klass = klass;
     return self;
@@ -679,8 +695,8 @@
     NUM2INT(x);
     NUM2INT(y);
 
-    ary_push(ply, x);
-    ary_push(ply, y);
+    rb_ary_push(ply, x);
+    rb_ary_push(ply, y);
     return ply;
 }
 
@@ -695,10 +711,10 @@
     NUM2INT(dy);
 
     if (RARRAY(ply)->len > 0) {
-        x = ary_entry(ply, RARRAY(ply)->len - 2);
-        y = ary_entry(ply, RARRAY(ply)->len - 1);
-        ary_push(ply, INT2NUM(NUM2INT(x) + NUM2INT(dx)));
-        ary_push(ply, INT2NUM(NUM2INT(y) + NUM2INT(dy)));
+        x = rb_ary_entry(ply, RARRAY(ply)->len - 2);
+        y = rb_ary_entry(ply, RARRAY(ply)->len - 1);
+        rb_ary_push(ply, INT2NUM(NUM2INT(x) + NUM2INT(dx)));
+        rb_ary_push(ply, INT2NUM(NUM2INT(y) + NUM2INT(dy)));
     } else {
         ply_add_pt(ply, dx, dy);
     }
@@ -714,7 +730,7 @@
     if (RARRAY(ply)->len < idx) return Qnil;
     i *= 2;
 
-    return assoc_new(ary_entry(ply, i), ary_entry(ply, i+1));
+    return rb_assoc_new(rb_ary_entry(ply, i), rb_ary_entry(ply, i+1));
 }
 
 static VALUE
@@ -727,8 +743,8 @@
     NUM2INT(x);
     NUM2INT(y);
 
-    ary_store(ply, i,   x);
-    ary_store(ply, i+1, y);
+    rb_ary_store(ply, i,   x);
+    rb_ary_store(ply, i+1, y);
 
     return ply;
 }
@@ -739,8 +755,8 @@
 {
     int i = NUM2INT(idx)*2;
 
-    ary_delete_at(ply, INT2FIX(i));
-    ary_delete_at(ply, INT2FIX(i+1));
+    rb_ary_delete_at(ply, INT2FIX(i));
+    rb_ary_delete_at(ply, INT2FIX(i+1));
 
     return ply;
 }
@@ -757,10 +773,10 @@
     struct RArray *ply;
 {
     int i;
-    VALUE ary = ary_new2(ply->len/2);
+    VALUE ary = rb_ary_new2(ply->len/2);
 
     for (i = 0; i<ply->len; i+=2) {
-	ary_push(ary, assoc_new(ply->ptr[i], ply->ptr[i+1]));
+	rb_ary_push(ary, rb_assoc_new(ply->ptr[i], ply->ptr[i+1]));
     }
     return ary;
 }
@@ -787,7 +803,7 @@
 	if (ny < t) t = ny;
 	if (ny > b) b = ny;
     }
-    return ary_new3(4, INT2FIX(l), INT2FIX(t), INT2FIX(r), INT2FIX(b));
+    return rb_ary_new3(4, INT2FIX(l), INT2FIX(t), INT2FIX(r), INT2FIX(b));
 }
 
 static VALUE
@@ -860,7 +876,7 @@
 	    (double)(NUM2INT(sb) - NUM2INT(st));
     }
     else {
-	ArgError("wrong # of arguments (%d for 4 or 8)", argc);
+	rb_raise(rb_eArgError, "wrong # of arguments (%d for 4 or 8)", argc);
     }
 
     for (i = 0; i<ply->len; i+=2) {
@@ -927,7 +943,7 @@
     if (strcmp(name, "Tiny") == 0) {
 	return fnt_create(gdFontTiny);
     }
-    ArgError("undefined font name `%s'", name);
+    rb_raise(rb_eArgError, "undefined font name `%s'", name);
 }
 
 static VALUE
@@ -983,9 +999,13 @@
 Init_GD()
 {
     mGD = rb_define_module("GD");
-    cImage = rb_define_class_under(mGD, "Image", cObject);
+    cImage = rb_define_class_under(mGD, "Image", rb_cObject);
     rb_define_singleton_method(cImage, "new", img_s_new, 2);
+#ifdef HAVE_GDIMAGEPNG
+    rb_define_singleton_method(cImage, "newFromPng", img_from_png, 1);
+#else
     rb_define_singleton_method(cImage, "newFromGif", img_from_gif, 1);
+#endif
     rb_define_singleton_method(cImage, "newFromXbm", img_from_xbm, 1);
     rb_define_singleton_method(cImage, "newFromGd",  img_from_gd, 1);
     rb_define_method(cImage, "destroy", img_destroy, 0);
@@ -1035,10 +1055,14 @@
     rb_define_method(cImage, "width", img_width, 0);
     rb_define_method(cImage, "height", img_height, 0);
 
+#ifdef HAVE_GDIMAGEPNG
+    rb_define_method(cImage, "png", img_png, 1);
+#else
     rb_define_method(cImage, "gif", img_gif, 1);
+#endif
     rb_define_method(cImage, "gd", img_gd, 1);
 
-    cPolygon = rb_define_class_under(mGD, "Polygon", cObject);
+    cPolygon = rb_define_class_under(mGD, "Polygon", rb_cObject);
     rb_define_singleton_method(cPolygon, "new", ply_new, 0);
 
     rb_define_method(cPolygon, "addPt", ply_add_pt, 2);
@@ -1054,7 +1078,7 @@
     rb_define_method(cPolygon, "transform", ply_transform, 6);
     rb_define_method(cPolygon, "scale", ply_scale, 2);
 
-    cFont = rb_define_class_under(mGD, "Font", cObject);
+    cFont = rb_define_class_under(mGD, "Font", rb_cObject);
     rb_define_singleton_method(cFont, "new", fnt_s_new, 1);
 
     rb_define_const(cFont, "GiantFont", fnt_new("Giant"));


       中村 典嗣  E-mail:     nnakamur@mxq.mesh.ne.jp

In This Thread