summaryrefslogtreecommitdiffstats
path: root/src/scripting/ffi.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting/ffi.h')
-rw-r--r--src/scripting/ffi.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/scripting/ffi.h b/src/scripting/ffi.h
new file mode 100644
index 0000000..b635d6f
--- /dev/null
+++ b/src/scripting/ffi.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 Patrick "P. J." McDermott
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _SCRIPTING_FFI_H_
+#define _SCRIPTING_FFI_H_
+
+#include "../resources/script.h"
+
+struct ffi_function {
+ const char *name;
+ void (*func)(void);
+ struct ffi_function *next;
+};
+struct ffi_namespace {
+ const char *name;
+ struct ffi_namespace *ns_head;
+ struct ffi_namespace *ns_tail;
+ struct ffi_function *fn_head;
+ struct ffi_function *fn_tail;
+ struct ffi_namespace *next;
+};
+
+void ffi_add_namespace(struct ffi_namespace *parent, const char *name);
+void ffi_add_function(struct ffi_namespace *parent, const char *name,
+ void (*func)(void));
+void ffi_register_functions(struct script *script);
+void ffi_context_switch(struct script *script);
+int ffi_stack_get_bool(void);
+int ffi_stack_get_int(void);
+double ffi_stack_get_float(void);
+const char *ffi_stack_get_string(void);
+void ffi_prepare_call(const char *func);
+void ffi_stack_set_bool(int v);
+void ffi_stack_set_int(int v);
+void ffi_stack_set_float(double v);
+void ffi_stack_set_string(const char *v);
+void ffi_call(void);
+
+#endif