[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Calling C functions from Embedded Ruby Interpreter

Mohit Sindhwani

4/24/2008 11:07:00 AM

Hi Everyone,

I know the subject line is quite a mouthful! Sorry about that.

I've managed to embed a Ruby interpreter into my application and I can
call Ruby functions from the code in my application. It works fine and
returns results to me as expected. I can also ask it to run a script
for me.

Now, I'd like to get it to do some automation for me. My project starts
up, loads a few things, sets a few properties, etc. I'd like to be able
to automate this using the embedded interpreter. I expect the code in
the script may be as simple as:
set_default_color(0x00ff0000)
set_screen_size(800,600)
...and so on.

Now, as I understand it, in my application, I need to these C functions
in it:
VALUE set_default_color (VALUE color)
VALUE set_screen_size (VALUE w, VALUE h)
... and so on.

I just don't know what to do next! I'm not even sure what I should
search for - should I like at how to create an extension? Does that
mean that I need to get into the mkmf, etc. and compile some things for
it to work (I shudder because my primary environment is Borland C++
Builder/ Turbo C++ and I had enough worries getting the interpreter to
be compiled in).

To use the script from the embedded interpreter, can I just ask it to
run the script?

I'm sorry if some of the questions/ explanations are a bit vague. Any
help/ direction is greatly appreciated.

Thanks
Mohit.



7 Answers

Mohit Sindhwani

4/24/2008 11:50:00 AM

0

Hello Again,

I found that the example on this page:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-t...

does have the necessary to help me connect the dots. I was staring at
the example for quite a while before I sent the email out, but I guess I
just didn't see it.

Thanks anyway.

Cheers,
Mohit.
4/24/2008 | 7:48 PM.


Mohit Sindhwani wrote:
> Hi Everyone,
>
> I know the subject line is quite a mouthful! Sorry about that.
>
> I've managed to embed a Ruby interpreter into my application and I can
> call Ruby functions from the code in my application. It works fine
> and returns results to me as expected. I can also ask it to run a
> script for me.
>
> Now, I'd like to get it to do some automation for me. My project
> starts up, loads a few things, sets a few properties, etc. I'd like
> to be able to automate this using the embedded interpreter. I expect
> the code in the script may be as simple as:
> set_default_color(0x00ff0000)
> set_screen_size(800,600)
> ...and so on.
>
> Now, as I understand it, in my application, I need to these C
> functions in it:
> VALUE set_default_color (VALUE color)
> VALUE set_screen_size (VALUE w, VALUE h)
> ... and so on.
>
> I just don't know what to do next! I'm not even sure what I should
> search for - should I like at how to create an extension? Does that
> mean that I need to get into the mkmf, etc. and compile some things
> for it to work (I shudder because my primary environment is Borland
> C++ Builder/ Turbo C++ and I had enough worries getting the
> interpreter to be compiled in).
>
> To use the script from the embedded interpreter, can I just ask it to
> run the script?
>
> I'm sorry if some of the questions/ explanations are a bit vague. Any
> help/ direction is greatly appreciated.
>
> Thanks
> Mohit.
>
>
>
>


Simon Krahnke

4/24/2008 12:20:00 PM

0

* Mohit Sindhwani <mo_mail@onghu.com> (13:06) schrieb:

> I know the subject line is quite a mouthful! Sorry about that.

I don't see anything wrong in the subject line.

> I've managed to embed a Ruby interpreter into my application and I can
> call Ruby functions from the code in my application. It works fine and
> returns results to me as expected. I can also ask it to run a script
> for me.

Grats.

> set_default_color(0x00ff0000)
> set_screen_size(800,600)
> ..and so on.
>
> Now, as I understand it, in my application, I need to these C functions
> in it:
> VALUE set_default_color (VALUE color)
> VALUE set_screen_size (VALUE w, VALUE h)
> .. and so on.
>
> I just don't know what to do next!

Well, the Pickaxe has a chapter on this stuff.

Try

rb_define_global_function("set_default_color", &set_default_color, 1)

There also is rb_define_module_function(VALUE model, char *name,
VALUE(*func)(), int argc) and rb_define_singleton_method taking the same
arguments. I never tried any of these, and don't quit know how to tell a
module function from a singleton function from a system function. (The
last one is in Kernel, the other two can be in any module or class.)

mfg, simon .... l

Mohit Sindhwani

4/27/2008 12:06:00 PM

0

Hi Simon

First, my apologies on the late response. Thanks for your email
relating to my request.

Simon Krahnke wrote:
> * Mohit Sindhwani <mo_mail@onghu.com> (13:06) schrieb
>> I know the subject line is quite a mouthful! Sorry about that.
>>
>
> I don't see anything wrong in the subject line.
>
Haha, thanks for that!

>> I've managed to embed a Ruby interpreter into my application and I can
>> call Ruby functions from the code in my application. It works fine and
>> returns results to me as expected. I can also ask it to run a script
>> for me.
>>
>
> Grats.
>
>
>> set_default_color(0x00ff0000)
>> set_screen_size(800,600)
>> ..and so on.
>>
>> Now, as I understand it, in my application, I need to these C functions
>> in it:
>> VALUE set_default_color (VALUE color)
>> VALUE set_screen_size (VALUE w, VALUE h)
>> .. and so on.
>>
>> I just don't know what to do next!
>>
>
> Well, the Pickaxe has a chapter on this stuff.
>
> Try
>
> rb_define_global_function("set_default_color", &set_default_color, 1)
>
> There also is rb_define_module_function(VALUE model, char *name,
> VALUE(*func)(), int argc) and rb_define_singleton_method taking the same
> arguments. I never tried any of these, and don't quit know how to tell a
> module function from a singleton function from a system function. (The
> last one is in Kernel, the other two can be in any module or class.)
>
>

Ya, actually wisdom strikes soon after one requests for help. I did
find the necessary stuff in one of the links that I had been staring at
for a while... and after that, it was easy enough to connect up the dots
to get things moving.

Thanks for the example. I followed the procedure for defining a module
and then creating the functions within it. Not sure if I eventually
want it to be that way but I know enough now to keep exploring.

> mfg, simon .... l
>

Might I ask what "mfg" stands for?

Thanks again.

Cheers,
Mohit.
4/27/2008 | 7:53 PM.


Mohit Sindhwani

4/27/2008 12:34:00 PM

0

David A. Black wrote:
> Hi --
>
>
>>> mfg, simon .... l
>>>
>>
>> Might I ask what "mfg" stands for?
>
> Mit freundlichen Grüßen (with friendly greetings -- more or less like
> "Best wishes").
>
>
> David
>

Thanks David! That's why I love this list - you learn a little bit
about languages all the time :)

Cheers,
Mohit.
4/27/2008 | 8:32 PM.


Pascal Bourguignon

4/27/2008 12:39:00 PM

0

Mohit Sindhwani <mo_mail@onghu.com> writes:

> David A. Black wrote:
>> Hi --
>>
>>
>>>> mfg, simon .... l
>>>>
>>>
>>> Might I ask what "mfg" stands for?
>>
>> Mit freundlichen Grüßen (with friendly greetings -- more or less like
>> "Best wishes").
>>
>>
>> David
>>
>
> Thanks David! That's why I love this list - you learn a little bit
> about languages all the time :)

Also, you could improve you google-fu. You'd find nice tools such as:
http://www.silmaril.ie/cgi-bin/uncgi/ac...

--
__Pascal Bourguignon__
http://www.informa...

Mohit Sindhwani

4/27/2008 12:45:00 PM

0

Pascal Bourguignon wrote:
> Also, you could improve you google-fu. You'd find nice tools such as:
> http://www.silmaril.ie/cgi-bin/uncgi/ac...
>
>

Point taken, Pascal. Sorry about that.

It was just a friendly question piggy-backed to my response to the
original reply. But, I understand what you mean. I could have avoided
the responses that followed.

By the way, thanks for the link - it's quite neat!

Mfg,
Mohit.


Arlen Cuss

4/27/2008 12:58:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

Hi,

On Sun, Apr 27, 2008 at 10:40 PM, Pascal Bourguignon <pjb@triton.local>
wrote:

> Also, you could improve you google-fu. You'd find nice tools such as:
> http://www.silmaril.ie/cgi-bin/uncgi/ac...


Hmm, I tried something similar, but I suppose the German answer was one I
skipped over subconsciously. We all learn something new!

Cheers,
Arlen.