1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
use alloc::{borrow::ToOwned, ffi::CString};
use crate::error::Error;
pub struct Lua {
#[allow(unused)]
handle: *const sys::playdate_lua,
}
impl Lua {
pub(crate) fn new(handle: *const sys::playdate_lua) -> Self {
Self { handle }
}
pub fn add_function(&self, f: sys::lua_CFunction, name: impl AsRef<str>) -> Result<(), Error> {
let c_string = CString::new(name.as_ref()).unwrap();
unsafe {
let mut err = core::ptr::null();
(*self.handle).addFunction.unwrap()(f, c_string.as_ptr(), &mut err);
if !err.is_null() {
let c_str = ::core::ffi::CStr::from_ptr(err);
let err_str = c_str.to_str().unwrap();
Err(Error::Lua(err_str.to_owned()))
} else {
Ok(())
}
}
}
// pub addFunction: ::core::option::Option<
// unsafe extern "C" fn(
// f: lua_CFunction,
// name: *const ::core::ffi::c_char,
// outErr: *mut *const ::core::ffi::c_char,
// ) -> ::core::ffi::c_int,
// >,
// pub registerClass: ::core::option::Option<
// unsafe extern "C" fn(
// name: *const ::core::ffi::c_char,
// reg: *const lua_reg,
// vals: *const lua_val,
// isstatic: ::core::ffi::c_int,
// outErr: *mut *const ::core::ffi::c_char,
// ) -> ::core::ffi::c_int,
// >,
// pub pushFunction: ::core::option::Option<unsafe extern "C" fn(f: lua_CFunction)>,
// pub indexMetatable: ::core::option::Option<unsafe extern "C" fn() -> ::core::ffi::c_int>,
// pub stop: ::core::option::Option<unsafe extern "C" fn()>,
// pub start: ::core::option::Option<unsafe extern "C" fn()>,
// pub getArgCount: ::core::option::Option<unsafe extern "C" fn() -> ::core::ffi::c_int>,
// pub getArgType: ::core::option::Option<
// unsafe extern "C" fn(
// pos: ::core::ffi::c_int,
// outClass: *mut *const ::core::ffi::c_char,
// ) -> LuaType,
// >,
// pub argIsNil:
// ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> ::core::ffi::c_int>,
// pub getArgBool:
// ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> ::core::ffi::c_int>,
// pub getArgInt:
// ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> ::core::ffi::c_int>,
// pub getArgFloat: ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> f32>,
// pub getArgString: ::core::option::Option<
// unsafe extern "C" fn(pos: ::core::ffi::c_int) -> *const ::core::ffi::c_char,
// >,
// pub getArgBytes: ::core::option::Option<
// unsafe extern "C" fn(
// pos: ::core::ffi::c_int,
// outlen: *mut usize,
// ) -> *const ::core::ffi::c_char,
// >,
// pub getArgObject: ::core::option::Option<
// unsafe extern "C" fn(
// pos: ::core::ffi::c_int,
// type_: *mut ::core::ffi::c_char,
// outud: *mut *mut LuaUDObject,
// ) -> *mut ::core::ffi::c_void,
// >,
// pub getBitmap:
// ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> *mut LCDBitmap>,
// pub getSprite:
// ::core::option::Option<unsafe extern "C" fn(pos: ::core::ffi::c_int) -> *mut LCDSprite>,
// pub pushNil: ::core::option::Option<unsafe extern "C" fn()>,
// pub pushBool: ::core::option::Option<unsafe extern "C" fn(val: ::core::ffi::c_int)>,
// pub pushInt: ::core::option::Option<unsafe extern "C" fn(val: ::core::ffi::c_int)>,
// pub pushFloat: ::core::option::Option<unsafe extern "C" fn(val: f32)>,
// pub pushString: ::core::option::Option<unsafe extern "C" fn(str_: *const ::core::ffi::c_char)>,
// pub pushBytes:
// ::core::option::Option<unsafe extern "C" fn(str_: *const ::core::ffi::c_char, len: usize)>,
// pub pushBitmap: ::core::option::Option<unsafe extern "C" fn(bitmap: *mut LCDBitmap)>,
// pub pushSprite: ::core::option::Option<unsafe extern "C" fn(sprite: *mut LCDSprite)>,
// pub pushObject: ::core::option::Option<
// unsafe extern "C" fn(
// obj: *mut ::core::ffi::c_void,
// type_: *mut ::core::ffi::c_char,
// nValues: ::core::ffi::c_int,
// ) -> *mut LuaUDObject,
// >,
// pub retainObject:
// ::core::option::Option<unsafe extern "C" fn(obj: *mut LuaUDObject) -> *mut LuaUDObject>,
// pub releaseObject: ::core::option::Option<unsafe extern "C" fn(obj: *mut LuaUDObject)>,
// pub setUserValue: ::core::option::Option<
// unsafe extern "C" fn(obj: *mut LuaUDObject, slot: ::core::ffi::c_uint),
// >,
// pub getUserValue: ::core::option::Option<
// unsafe extern "C" fn(
// obj: *mut LuaUDObject,
// slot: ::core::ffi::c_uint,
// ) -> ::core::ffi::c_int,
// >,
// pub callFunction_deprecated: ::core::option::Option<
// unsafe extern "C" fn(name: *const ::core::ffi::c_char, nargs: ::core::ffi::c_int),
// >,
// pub callFunction: ::core::option::Option<
// unsafe extern "C" fn(
// name: *const ::core::ffi::c_char,
// nargs: ::core::ffi::c_int,
// outerr: *mut *const ::core::ffi::c_char,
// ) -> ::core::ffi::c_int,
// >,
}