ROOT logo
// @(#)root/ruby:$Id: TRuby.cxx 21443 2007-12-18 10:27:41Z brun $
// Author:  Elias Athanasopoulos, May 2004
//
// Interface for the Ruby shell.
//
// (c) 2004 - Elias Athanasopoulos  <elathan@phys.uoa.gr>
//
//

#include "TRuby.h"

#include "TROOT.h"
#include "TSystem.h"

#include "ruby.h"

ClassImp(TRuby)

extern VALUE cTObject;

bool TRuby::Initialize()
{
    static int IsInitialized = 0;

    if (!IsInitialized)
      {
        ruby_init();
        IsInitialized = 1;
      }

    return true;
}

void TRuby::Exec(const char *cmd)
{
    int state = 0;

    TRuby::Initialize();
    rb_eval_string_protect(cmd, &state);

    /* Print error if needed.  */
    if (state) rb_eval_string("puts $!");
}

TObject *TRuby::Eval(const char* expr)
{
    TObject *res;
    int state = 0;

    TRuby::Initialize();
    VALUE ret = rb_eval_string_protect(expr, &state);

    /* Print error if needed.  */
    if (state)
      {
        rb_eval_string("puts $!");
        return (TObject*)(0);
      }

    if (NIL_P(ret)) return (TObject*)0;

    /* Return the instance pointer if it is a ROOT
     * object.
     */
    VALUE ptr = rb_iv_get(ret, "__rr__");
    if (!NIL_P(ptr))
      {
        Data_Get_Struct(rb_iv_get(ret, "__rr__"), TObject, res);
        return res;
      }

    return (TObject*)0;
}

bool TRuby::Bind(TObject *obj, const char *label)
{
    VALUE *v = ALLOC(VALUE);

    *v = rb_class_new_instance (0, 0, cTObject);

    rb_iv_set(*v, "__rr__", Data_Wrap_Struct (cTObject, 0, 0, obj));
    rb_define_variable(label, v);

    return true;
}

void TRuby::Prompt()
{
    gSystem->Exec("irb");
}
 TRuby.cxx:1
 TRuby.cxx:2
 TRuby.cxx:3
 TRuby.cxx:4
 TRuby.cxx:5
 TRuby.cxx:6
 TRuby.cxx:7
 TRuby.cxx:8
 TRuby.cxx:9
 TRuby.cxx:10
 TRuby.cxx:11
 TRuby.cxx:12
 TRuby.cxx:13
 TRuby.cxx:14
 TRuby.cxx:15
 TRuby.cxx:16
 TRuby.cxx:17
 TRuby.cxx:18
 TRuby.cxx:19
 TRuby.cxx:20
 TRuby.cxx:21
 TRuby.cxx:22
 TRuby.cxx:23
 TRuby.cxx:24
 TRuby.cxx:25
 TRuby.cxx:26
 TRuby.cxx:27
 TRuby.cxx:28
 TRuby.cxx:29
 TRuby.cxx:30
 TRuby.cxx:31
 TRuby.cxx:32
 TRuby.cxx:33
 TRuby.cxx:34
 TRuby.cxx:35
 TRuby.cxx:36
 TRuby.cxx:37
 TRuby.cxx:38
 TRuby.cxx:39
 TRuby.cxx:40
 TRuby.cxx:41
 TRuby.cxx:42
 TRuby.cxx:43
 TRuby.cxx:44
 TRuby.cxx:45
 TRuby.cxx:46
 TRuby.cxx:47
 TRuby.cxx:48
 TRuby.cxx:49
 TRuby.cxx:50
 TRuby.cxx:51
 TRuby.cxx:52
 TRuby.cxx:53
 TRuby.cxx:54
 TRuby.cxx:55
 TRuby.cxx:56
 TRuby.cxx:57
 TRuby.cxx:58
 TRuby.cxx:59
 TRuby.cxx:60
 TRuby.cxx:61
 TRuby.cxx:62
 TRuby.cxx:63
 TRuby.cxx:64
 TRuby.cxx:65
 TRuby.cxx:66
 TRuby.cxx:67
 TRuby.cxx:68
 TRuby.cxx:69
 TRuby.cxx:70
 TRuby.cxx:71
 TRuby.cxx:72
 TRuby.cxx:73
 TRuby.cxx:74
 TRuby.cxx:75
 TRuby.cxx:76
 TRuby.cxx:77
 TRuby.cxx:78
 TRuby.cxx:79
 TRuby.cxx:80
 TRuby.cxx:81
 TRuby.cxx:82
 TRuby.cxx:83
 TRuby.cxx:84
 TRuby.cxx:85
 TRuby.cxx:86
 TRuby.cxx:87
 TRuby.cxx:88
 TRuby.cxx:89
 TRuby.cxx:90