Ruby embedded

This commit is contained in:
2022-08-01 18:32:58 +00:00
parent 760765d350
commit 2e7da5c4e6
4 changed files with 33 additions and 57 deletions

View File

@@ -8,6 +8,8 @@
#include "circbuf.h"
struct dsp_iir;
void dsp_rectify(short *in, short *out, int n);

View File

@@ -1,59 +1,34 @@
#include "script.h"
#include "gameobject.h"
#include "stdio.h"
#include "mruby.h"
#include "mruby/compile.h"
/*#include <s7.h>
static mrb_state *mrb;
s7_scheme *s7 = NULL;
s7_pointer s7square(s7_scheme * sc, s7_pointer args)
{
if (s7_is_integer(s7_car(args)))
return (s7_make_integer
(sc, s7_integer(s7_car(args)) * s7_integer(s7_car(args))));
return (s7_wrong_type_arg_error
(sc, "square", 1, s7_car(args), "an integer"));
int fib(int n) {
if (n < 2) return n;
return fib(n-1) + fib(n-2);
}
s7_pointer s7move(s7_scheme * sc, s7_pointer args)
{
if (s7_is_number(s7_car(args)) && s7_is_number(s7_cadr(args))) {
gameobject_move(updateGO, s7_real(s7_car(args)),
s7_real(s7_cadr(args)));
return args;
}
return args;
mrb_value mrb_fib(mrb_state *mrb, mrb_value self) {
int n;
mrb_get_args(mrb, "i", &n);
return mrb_fixnum_value(fib(n));
}
s7_pointer s7rotate(s7_scheme * sc, s7_pointer args)
{
if (s7_is_number(s7_car(args))) {
gameobject_rotate(updateGO, s7_real(s7_car(args)));
return (s7_make_real(sc, cpBodyGetAngle(updateGO->body)));
}
return (s7_wrong_type_arg_error
(sc, "rotate", 1, s7_car(args), "a number"));
}
*/
void script_init()
{
/*
s7 = s7_init();
s7_define_function(s7, "square", s7square, 1, 0, 0,
"(square int) squares int");
s7_define_function(s7, "move", s7move, 1, 0, 0,
"(move (xs ys)) moves at xs and ys pixels per second");
s7_define_function(s7, "rotate", s7rotate, 1, 0, 0,
"(rotate ms) rotates at ms meters per second");
*/
void script_init() {
mrb = mrb_open();
mrb_define_method(mrb, mrb->object_class, "fib", mrb_fib, MRB_ARGS_REQ(1));
}
void script_run(const char *script)
{
//s7_eval_c_string(s7, script);
void script_run(const char *script) {
mrb_load_string(mrb, script);
}
void script_dofile(const char *file) {
FILE *mrbf = fopen(file, "r");
mrb_load_file(mrb, mrbf);
fclose(mrbf);
}

View File

@@ -1,10 +1,8 @@
#ifndef SCRIPT_H
#define SCRIPT_H
struct s7_scheme;
extern struct s7_scheme *s7;
void script_init();
void script_run(const char *script);
void script_dofile(const char *file);
#endif