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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
use std::ffi::c_void;
use std::os::raw::{c_char, c_double, c_int};
use crate::plugin2::EDIT_SECTION;
/// 引数の型種別
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PARAM_TYPE {
NONE = -1,
NIL = 0,
BOOLEAN = 1,
LIGHTUSERDATA = 2,
NUMBER = 3,
STRING = 4,
TABLE = 5,
FUNCTION = 6,
USERDATA = 7,
THREAD = 8,
}
/// スクリプトモジュール引数構造体
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct SCRIPT_MODULE_PARAM {
/// 引数の数を取得する
/// 戻り値 : 引数の数
pub get_param_num: unsafe extern "C" fn() -> c_int,
/// 引数を整数で取得する
/// index : 引数の位置(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合は0)
pub get_param_int: unsafe extern "C" fn(index: c_int) -> c_int,
/// 引数を浮動小数点で取得する
/// index : 引数の位置(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合は0)
pub get_param_double: unsafe extern "C" fn(index: c_int) -> c_double,
/// 引数を文字列(UTF-8)で取得する
/// index : 引数の位置(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合はnullptr)
pub get_param_string: unsafe extern "C" fn(index: c_int) -> *const c_char,
/// 引数をデータのポインタで取得する ※LightUserData等から取得
/// index : 引数の位置(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合はnullptr)
pub get_param_data: unsafe extern "C" fn(index: c_int) -> *mut c_void,
/// 引数の連想配列要素を整数で取得する
/// index : 引数の位置(0〜)
/// key : キー名(UTF-8)
/// 戻り値 : 引数の値 (取得出来ない場合は0)
pub get_param_table_int: unsafe extern "C" fn(index: c_int, key: *const c_char) -> c_int,
/// 引数の連想配列要素を浮動小数点で取得する
/// index : 引数の位置(0〜)
/// key : キー名(UTF-8)
/// 戻り値 : 引数の値 (取得出来ない場合は0)
pub get_param_table_double: unsafe extern "C" fn(index: c_int, key: *const c_char) -> c_double,
/// 引数の連想配列要素を文字列(UTF-8)で取得する
/// index : 引数の位置(0〜)
/// key : キー名(UTF-8)
/// 戻り値 : 引数の値 (取得出来ない場合はnullptr)
pub get_param_table_string:
unsafe extern "C" fn(index: c_int, key: *const c_char) -> *const c_char,
/// 引数の配列要素の数を取得する
/// index : 引数の位置(0〜)
/// 戻り値 : 配列要素の数
pub get_param_array_num: unsafe extern "C" fn(index: c_int) -> c_int,
/// 引数の配列要素を整数で取得する
/// index : 引数の位置(0〜)
/// key : 配列のインデックス(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合は0)
pub get_param_array_int: unsafe extern "C" fn(index: c_int, key: c_int) -> c_int,
/// 引数の配列要素を浮動小数点で取得する
/// index : 引数の位置(0〜)
/// key : 配列のインデックス(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合は0)
pub get_param_array_double: unsafe extern "C" fn(index: c_int, key: c_int) -> c_double,
/// 引数の配列要素を文字列(UTF-8)で取得する
/// index : 引数の位置(0〜)
/// key : 配列のインデックス(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合はnullptr)
pub get_param_array_string: unsafe extern "C" fn(index: c_int, key: c_int) -> *const c_char,
/// 整数の戻り値を追加する
/// value : 戻り値
pub push_result_int: unsafe extern "C" fn(value: c_int),
/// 浮動小数点の戻り値を追加する
/// value : 戻り値
pub push_result_double: unsafe extern "C" fn(value: c_double),
/// 文字列(UTF-8)の戻り値を追加する
/// value : 戻り値
pub push_result_string: unsafe extern "C" fn(value: *const c_char),
/// データのポインタの戻り値を追加する ※LightUserDataを返却
/// value : 戻り値
pub push_result_data: unsafe extern "C" fn(value: *const c_void),
/// 整数連想配列の戻り値を追加する
/// key : キー名(UTF-8)の配列
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_table_int:
unsafe extern "C" fn(key: *const *const c_char, value: *const c_int, num: c_int),
/// 浮動小数点連想配列の戻り値を追加する
/// key : キー名(UTF-8)の配列
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_table_double:
unsafe extern "C" fn(key: *const *const c_char, value: *const c_double, num: c_int),
/// 文字列(UTF-8)連想配列の戻り値を追加する
/// key : キー名(UTF-8)の配列
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_table_string:
unsafe extern "C" fn(key: *const *const c_char, value: *const *const c_char, num: c_int),
/// 整数配列の戻り値を追加する
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_array_int: unsafe extern "C" fn(value: *const c_int, num: c_int),
/// 浮動小数点配列の戻り値を追加する
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_array_double: unsafe extern "C" fn(value: *const c_double, num: c_int),
/// 文字列(UTF-8)配列の戻り値を追加する
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_array_string: unsafe extern "C" fn(value: *const *const c_char, num: c_int),
/// エラーメッセージを設定する
/// 呼び出された関数をエラー終了する場合に設定します
/// message : エラーメッセージ(UTF-8)
pub set_error: unsafe extern "C" fn(message: *const c_char),
/// 引数をブール値で取得する
/// index : 引数の位置(0〜)
/// 戻り値 : 引数の値 (取得出来ない場合はfalse)
pub get_param_boolean: unsafe extern "C" fn(index: c_int) -> bool,
/// ブール値の戻り値を追加する
/// value : 戻り値
pub push_result_boolean: unsafe extern "C" fn(value: bool),
/// 引数の連想配列要素をブール値で取得する
/// index : 引数の位置(0〜)
/// key : キー名(UTF-8)
/// 戻り値 : 引数の値 (取得出来ない場合はfalse)
pub get_param_table_boolean: unsafe extern "C" fn(index: c_int, key: *const c_char) -> bool,
/// ブール値配列の戻り値を追加する
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_array_boolean: unsafe extern "C" fn(value: *const bool, num: c_int),
/// ブール値連想配列の戻り値を追加する
/// key : キー名(UTF-8)の配列
/// value : 戻り値の配列
/// num : 配列の要素数
pub push_result_table_boolean:
unsafe extern "C" fn(key: *const *const c_char, value: *const bool, num: c_int),
/// 編集セクション関数
/// スクリプト処理中は参照系の関数が利用出来ます
pub edit: *mut EDIT_SECTION,
/// 関数を戻り値として追加する
/// func : 返却した関数の実行時に呼ばれるコールバック関数
/// userdata : 任意のユーザーデータのポインタ
pub push_result_function: unsafe extern "C" fn(
func: unsafe extern "C" fn(smp: *mut SCRIPT_MODULE_PARAM),
userdata: *mut c_void,
),
/// 新しい関数に差し替えるので廃止します
pub deprecated_push_result_meta_table: unsafe extern "C" fn(
func_getter: unsafe extern "C" fn(smp: *mut SCRIPT_MODULE_PARAM),
func_setter: unsafe extern "C" fn(smp: *mut SCRIPT_MODULE_PARAM),
userdata: *mut c_void,
),
/// 任意のユーザーデータのポインタ
/// push_result_function(),push_result_meta_table()の引数の値が格納されます
pub userdata: *mut c_void,
/// メタテーブルの戻り値を追加する
/// 任意のメタメソッドのコールバック関数を設定したメタテーブルを返却します
/// meta_method_functions : 登録するメタメソッドの一覧 (META_METHOD_FUNCTIONを列挙してメタメソッド名がnullの要素で終端したリストへのポインタ)
/// userdata : 任意のユーザーデータのポインタ
pub push_result_meta_table: unsafe extern "C" fn(
meta_method_functions: *const META_METHOD_FUNCTION,
userdata: *mut c_void,
),
/// 引数のメタテーブルのuserdataのポインタを取得する
/// index : 引数の位置(0〜)
/// meta_method_functions : 対象のメタテーブルを識別する為のメタメソッドの一覧 ※同一アドレスの場合のみ取得出来ます
/// 戻り値 : userdataのポインタ (取得出来ない場合はnullptr)
pub get_param_meta_table: unsafe extern "C" fn(
index: c_int,
meta_method_functions: *mut META_METHOD_FUNCTION,
) -> *mut c_void,
/// 引数の型を取得します
/// index : 引数の位置(0〜)
/// 戻り値 : 引数の型
pub get_param_type: unsafe extern "C" fn(index: c_int) -> PARAM_TYPE,
}
/// メタメソッド定義構造体
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct META_METHOD_FUNCTION {
/// メタメソッド名 ※luaのメタメソッドを指定出来ます
pub method: *const c_char,
/// コールバック関数
pub func: unsafe extern "C" fn(smp: *mut SCRIPT_MODULE_PARAM),
}
/// スクリプトモジュール関数定義構造体
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct SCRIPT_MODULE_FUNCTION {
/// 関数名
pub name: *const u16,
/// 関数へのポインタ
pub func: unsafe extern "C" fn(smp: *mut SCRIPT_MODULE_PARAM),
}
/// スクリプトモジュール構造体
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct SCRIPT_MODULE_TABLE {
/// スクリプトモジュールの情報
pub information: *const u16,
/// 登録する関数の一覧 (SCRIPT_MODULE_FUNCTIONを列挙して関数名がnullの要素で終端したリストへのポインタ)
pub functions: *const SCRIPT_MODULE_FUNCTION,
}