William Djaja Tjokroaminata wrote:
...
> Can you help to write the statement
> 
>     func1 (arg1, &arg2)
> 
> in C?  I am still struggling on how to covert this Proc "&" operator to
> C.  (Well, everything else fails, there is always that
> "rb_eval_string()" ultimate weapon :) )

Maybe rb_iterate is what you're looking for. From the Pickaxe:

   VALUE rb_iterate(VALUE (*method)(), VALUE args, VALUE (*block)(),
                    VALUE arg2)

   Invokes method with argument args and block block. A yield from
   that method will invoke block with the argument given to yield, and
   a second argument arg2.

So you would have to wrap your method, func1, and your proc, arg2, 
inside two C functions, and pass pointers to them as method and block in 
the prototype.

I wish there were an rb_iterate2 or something which accepted a symbol 
and a proc as VALUEs, to save you from having to wrap them in functions.