[Gauche-devel-jp] FILE* を define-cproc で受け取るには?

Back to archive index

Makoto Satoh makot****@yahoo*****
2005年 4月 15日 (金) 17:02:18 JST


さとうです。

昨日から、GD2バインディングに挑戦してます。
<gd>のcreate/destroy/initializeができた程度ですが。
これから、それぞれの関数をバインドしていこうと思っていますが、
初手からつまずいています。

GD2では、イメージオブジェクトに対して描画命令を出していって、
最終的にファイルに書き出すわけですが、この部分はどのように
実装すべきでしょうか?

Scheme側で作ったファイルポートを受け取り、そこへイメージ
データを書き出すようにすると使いやすいのかなと思っていますが。

Cでは、

  gdImagePtr im;
  FILE *out;

  im = gdImageCreate(100, 100);
  ....(描画命令)....
  out = fopen("test.png", "wb");
  gdImagePng(im, out);
  fclose(out);

のように書きます。

Schemeでは、

  (call-with-output-file "test.png"
    (lambda (p)
      (gd-image-png imageobj p)))

というのが直接的なマッピングになりますでしょうか?

この場合、gd-image-pngはポートpを受け取らなければなりませんが、
そういう場合はdefine-cprocの中ではどのようにpを受け取って、
Cコードの中ではどのようにファイルポインタに(?)するのでしょうか?

あるいは、

  (gd-image-png imageobj "test.png")

のようにファイル名を受け取って、define-cprocの中でFILE*を作る
ほうが良いでしょうか?

Schemeコード上の自然さとdefine-cprocでの受け取り方を教えて
いただけますか?

Gauche-0.8.3/extの中には外からSchemeポートを受け取るようなものは
ないですよね? gdbm.stubがファイル名を受け取って中で開いているのは
読みました。これは後者ですね。

また、GDではイメージオブジェクトに対して描画命令を与えていくので、
Cでは副作用ばかりな感じになってしまいますが、Scheme手続きは
都度イメージオブジェクトを返すようにしたほうが良いでしょうか?

質問ばかりですみません。よろしくお願いします。
      
  





Gauche-devel-jp メーリングリストの案内
Back to archive index