pub const ANVIL_API_VERSION: u32 = 2;
pub const ANVIL_EVENT_PLUGINS_LOADED: &[u8; 21] = b"anvil.plugins_loaded\0";
pub const ANVIL_EVENT_SUSPENDED: &[u8; 16] = b"anvil.suspended\0";
pub const ANVIL_EVENT_RESUMED: &[u8; 14] = b"anvil.resumed\0";
pub type wchar_t = core::ffi::c_ushort;
#[repr(C)]
#[derive(Debug)]
pub struct AnvilPlugin {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug)]
pub struct AnvilChange {
_unused: [u8; 0],
}
pub type AnvilSymbol = u32;
pub type AnvilSetting = u32;
pub const ANVIL_OK: AnvilResult = 0;
pub const ANVIL_ERROR_INVALID_ARGUMENT: AnvilResult = 1;
pub const ANVIL_ERROR_NOT_DECLARED: AnvilResult = 2;
pub const ANVIL_ERROR_WRONG_KIND: AnvilResult = 3;
pub const ANVIL_ERROR_CONFLICT: AnvilResult = 4;
pub const ANVIL_ERROR_UNSAFE_SITE: AnvilResult = 5;
pub const ANVIL_ERROR_BYTES_MISMATCH: AnvilResult = 6;
pub const ANVIL_ERROR_OUT_OF_MEMORY: AnvilResult = 7;
pub const ANVIL_ERROR_WRONG_PHASE: AnvilResult = 8;
pub const ANVIL_ERROR_UNSUPPORTED: AnvilResult = 9;
pub const ANVIL_ERROR_INTERNAL: AnvilResult = 10;
pub const ANVIL_ERROR_NOT_FOUND: AnvilResult = 11;
pub const ANVIL_ERROR_ALREADY_EXISTS: AnvilResult = 12;
pub type AnvilResult = core::ffi::c_int;
pub const ANVIL_LOG_DEBUG: AnvilLogLevel = 0;
pub const ANVIL_LOG_INFO: AnvilLogLevel = 1;
pub const ANVIL_LOG_WARNING: AnvilLogLevel = 2;
pub const ANVIL_LOG_ERROR: AnvilLogLevel = 3;
pub type AnvilLogLevel = core::ffi::c_int;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AnvilGameInfo {
pub size: u32,
pub build_id: *const core::ffi::c_char,
pub image_base: usize,
pub image_size: u32,
pub sha256: *const core::ffi::c_char,
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of AnvilGameInfo"][::core::mem::size_of::<AnvilGameInfo>() - 40usize];
["Alignment of AnvilGameInfo"][::core::mem::align_of::<AnvilGameInfo>() - 8usize];
[
"Offset of field: AnvilGameInfo::size",
][::core::mem::offset_of!(AnvilGameInfo, size) - 0usize];
[
"Offset of field: AnvilGameInfo::build_id",
][::core::mem::offset_of!(AnvilGameInfo, build_id) - 8usize];
[
"Offset of field: AnvilGameInfo::image_base",
][::core::mem::offset_of!(AnvilGameInfo, image_base) - 16usize];
[
"Offset of field: AnvilGameInfo::image_size",
][::core::mem::offset_of!(AnvilGameInfo, image_size) - 24usize];
[
"Offset of field: AnvilGameInfo::sha256",
][::core::mem::offset_of!(AnvilGameInfo, sha256) - 32usize];
};
#[repr(C)]
#[derive(Copy, Clone)]
pub union AnvilXmm {
pub u8_: [u8; 16usize],
pub u16_: [u16; 8usize],
pub u32_: [u32; 4usize],
pub u64_: [u64; 2usize],
pub f32_: [f32; 4usize],
pub f64_: [f64; 2usize],
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of AnvilXmm"][::core::mem::size_of::<AnvilXmm>() - 16usize];
["Alignment of AnvilXmm"][::core::mem::align_of::<AnvilXmm>() - 8usize];
["Offset of field: AnvilXmm::u8_"][::core::mem::offset_of!(AnvilXmm, u8_) - 0usize];
[
"Offset of field: AnvilXmm::u16_",
][::core::mem::offset_of!(AnvilXmm, u16_) - 0usize];
[
"Offset of field: AnvilXmm::u32_",
][::core::mem::offset_of!(AnvilXmm, u32_) - 0usize];
[
"Offset of field: AnvilXmm::u64_",
][::core::mem::offset_of!(AnvilXmm, u64_) - 0usize];
[
"Offset of field: AnvilXmm::f32_",
][::core::mem::offset_of!(AnvilXmm, f32_) - 0usize];
[
"Offset of field: AnvilXmm::f64_",
][::core::mem::offset_of!(AnvilXmm, f64_) - 0usize];
};
#[repr(C)]
#[derive(Copy, Clone)]
pub struct AnvilCpuContext {
pub xmm: [AnvilXmm; 16usize],
pub rflags: usize,
pub r15: usize,
pub r14: usize,
pub r13: usize,
pub r12: usize,
pub r11: usize,
pub r10: usize,
pub r9: usize,
pub r8: usize,
pub rdi: usize,
pub rsi: usize,
pub rdx: usize,
pub rcx: usize,
pub rbx: usize,
pub rax: usize,
pub rbp: usize,
pub rsp: usize,
pub reserved: usize,
pub rip: usize,
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of AnvilCpuContext"][::core::mem::size_of::<AnvilCpuContext>() - 408usize];
[
"Alignment of AnvilCpuContext",
][::core::mem::align_of::<AnvilCpuContext>() - 8usize];
[
"Offset of field: AnvilCpuContext::xmm",
][::core::mem::offset_of!(AnvilCpuContext, xmm) - 0usize];
[
"Offset of field: AnvilCpuContext::rflags",
][::core::mem::offset_of!(AnvilCpuContext, rflags) - 256usize];
[
"Offset of field: AnvilCpuContext::r15",
][::core::mem::offset_of!(AnvilCpuContext, r15) - 264usize];
[
"Offset of field: AnvilCpuContext::r14",
][::core::mem::offset_of!(AnvilCpuContext, r14) - 272usize];
[
"Offset of field: AnvilCpuContext::r13",
][::core::mem::offset_of!(AnvilCpuContext, r13) - 280usize];
[
"Offset of field: AnvilCpuContext::r12",
][::core::mem::offset_of!(AnvilCpuContext, r12) - 288usize];
[
"Offset of field: AnvilCpuContext::r11",
][::core::mem::offset_of!(AnvilCpuContext, r11) - 296usize];
[
"Offset of field: AnvilCpuContext::r10",
][::core::mem::offset_of!(AnvilCpuContext, r10) - 304usize];
[
"Offset of field: AnvilCpuContext::r9",
][::core::mem::offset_of!(AnvilCpuContext, r9) - 312usize];
[
"Offset of field: AnvilCpuContext::r8",
][::core::mem::offset_of!(AnvilCpuContext, r8) - 320usize];
[
"Offset of field: AnvilCpuContext::rdi",
][::core::mem::offset_of!(AnvilCpuContext, rdi) - 328usize];
[
"Offset of field: AnvilCpuContext::rsi",
][::core::mem::offset_of!(AnvilCpuContext, rsi) - 336usize];
[
"Offset of field: AnvilCpuContext::rdx",
][::core::mem::offset_of!(AnvilCpuContext, rdx) - 344usize];
[
"Offset of field: AnvilCpuContext::rcx",
][::core::mem::offset_of!(AnvilCpuContext, rcx) - 352usize];
[
"Offset of field: AnvilCpuContext::rbx",
][::core::mem::offset_of!(AnvilCpuContext, rbx) - 360usize];
[
"Offset of field: AnvilCpuContext::rax",
][::core::mem::offset_of!(AnvilCpuContext, rax) - 368usize];
[
"Offset of field: AnvilCpuContext::rbp",
][::core::mem::offset_of!(AnvilCpuContext, rbp) - 376usize];
[
"Offset of field: AnvilCpuContext::rsp",
][::core::mem::offset_of!(AnvilCpuContext, rsp) - 384usize];
[
"Offset of field: AnvilCpuContext::reserved",
][::core::mem::offset_of!(AnvilCpuContext, reserved) - 392usize];
[
"Offset of field: AnvilCpuContext::rip",
][::core::mem::offset_of!(AnvilCpuContext, rip) - 400usize];
};
pub type AnvilCpuCallback = ::core::option::Option<
unsafe extern "C" fn(cpu: *mut AnvilCpuContext, user: *mut core::ffi::c_void),
>;
pub type AnvilEventCallback = ::core::option::Option<
unsafe extern "C" fn(
event: *const core::ffi::c_char,
payload: *const core::ffi::c_void,
context: *mut core::ffi::c_void,
),
>;
pub type AnvilSettingCallback = ::core::option::Option<
unsafe extern "C" fn(setting: AnvilSetting, context: *mut core::ffi::c_void),
>;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct AnvilHost {
pub size: u32,
pub api_version: u32,
pub anvil_version: *const core::ffi::c_char,
pub game: *const AnvilGameInfo,
pub log: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
level: AnvilLogLevel,
message: *const core::ffi::c_char,
),
>,
pub plugin_dir: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin) -> *const wchar_t,
>,
pub data_dir: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin) -> *const wchar_t,
>,
pub hook_function: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
fn_: AnvilSymbol,
detour: *mut core::ffi::c_void,
next: *mut *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub mid_hook: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
site: AnvilSymbol,
callback: AnvilCpuCallback,
user: *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub replace_block: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
block: AnvilSymbol,
callback: AnvilCpuCallback,
user: *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub redirect_call: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
call_site: AnvilSymbol,
target: *mut core::ffi::c_void,
next: *mut *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub patch_bytes: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
site: AnvilSymbol,
bytes: *const core::ffi::c_void,
size: usize,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub swap_pointer: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
slot: AnvilSymbol,
value: *mut core::ffi::c_void,
previous: *mut *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub replace_import: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
module: *const core::ffi::c_char,
function: *const core::ffi::c_char,
replacement: *mut core::ffi::c_void,
next: *mut *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub hook_function_at: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
address: *mut core::ffi::c_void,
expected_prologue: *const core::ffi::c_void,
prologue_size: usize,
detour: *mut core::ffi::c_void,
next: *mut *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub mid_hook_at: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
address: *mut core::ffi::c_void,
expected: *const core::ffi::c_void,
expected_size: usize,
callback: AnvilCpuCallback,
user: *mut core::ffi::c_void,
out: *mut *mut AnvilChange,
) -> AnvilResult,
>,
pub remove: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
change: *mut AnvilChange,
) -> AnvilResult,
>,
pub begin_group: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin) -> AnvilResult,
>,
pub commit_group: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin) -> AnvilResult,
>,
pub abort_group: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin),
>,
pub address_of: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
symbol: AnvilSymbol,
) -> *mut core::ffi::c_void,
>,
pub symbol_value: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
symbol: AnvilSymbol,
name: *const core::ffi::c_char,
out: *mut u64,
) -> AnvilResult,
>,
pub setting_bool: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
setting: AnvilSetting,
) -> core::ffi::c_int,
>,
pub setting_int: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin, setting: AnvilSetting) -> i64,
>,
pub setting_float: ::core::option::Option<
unsafe extern "C" fn(self_: *mut AnvilPlugin, setting: AnvilSetting) -> f64,
>,
pub setting_string: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
setting: AnvilSetting,
) -> *const core::ffi::c_char,
>,
pub subscribe_setting: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
setting: AnvilSetting,
callback: AnvilSettingCallback,
context: *mut core::ffi::c_void,
) -> AnvilResult,
>,
pub register_service: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
name: *const core::ffi::c_char,
version: u32,
service: *const core::ffi::c_void,
) -> AnvilResult,
>,
pub get_service: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
name: *const core::ffi::c_char,
version: u32,
) -> *const core::ffi::c_void,
>,
pub subscribe: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
event: *const core::ffi::c_char,
callback: AnvilEventCallback,
context: *mut core::ffi::c_void,
) -> AnvilResult,
>,
pub publish: ::core::option::Option<
unsafe extern "C" fn(
self_: *mut AnvilPlugin,
event: *const core::ffi::c_char,
payload: *const core::ffi::c_void,
) -> AnvilResult,
>,
}
#[allow(clippy::unnecessary_operation, clippy::identity_op)]
const _: () = {
["Size of AnvilHost"][::core::mem::size_of::<AnvilHost>() - 240usize];
["Alignment of AnvilHost"][::core::mem::align_of::<AnvilHost>() - 8usize];
[
"Offset of field: AnvilHost::size",
][::core::mem::offset_of!(AnvilHost, size) - 0usize];
[
"Offset of field: AnvilHost::api_version",
][::core::mem::offset_of!(AnvilHost, api_version) - 4usize];
[
"Offset of field: AnvilHost::anvil_version",
][::core::mem::offset_of!(AnvilHost, anvil_version) - 8usize];
[
"Offset of field: AnvilHost::game",
][::core::mem::offset_of!(AnvilHost, game) - 16usize];
[
"Offset of field: AnvilHost::log",
][::core::mem::offset_of!(AnvilHost, log) - 24usize];
[
"Offset of field: AnvilHost::plugin_dir",
][::core::mem::offset_of!(AnvilHost, plugin_dir) - 32usize];
[
"Offset of field: AnvilHost::data_dir",
][::core::mem::offset_of!(AnvilHost, data_dir) - 40usize];
[
"Offset of field: AnvilHost::hook_function",
][::core::mem::offset_of!(AnvilHost, hook_function) - 48usize];
[
"Offset of field: AnvilHost::mid_hook",
][::core::mem::offset_of!(AnvilHost, mid_hook) - 56usize];
[
"Offset of field: AnvilHost::replace_block",
][::core::mem::offset_of!(AnvilHost, replace_block) - 64usize];
[
"Offset of field: AnvilHost::redirect_call",
][::core::mem::offset_of!(AnvilHost, redirect_call) - 72usize];
[
"Offset of field: AnvilHost::patch_bytes",
][::core::mem::offset_of!(AnvilHost, patch_bytes) - 80usize];
[
"Offset of field: AnvilHost::swap_pointer",
][::core::mem::offset_of!(AnvilHost, swap_pointer) - 88usize];
[
"Offset of field: AnvilHost::replace_import",
][::core::mem::offset_of!(AnvilHost, replace_import) - 96usize];
[
"Offset of field: AnvilHost::hook_function_at",
][::core::mem::offset_of!(AnvilHost, hook_function_at) - 104usize];
[
"Offset of field: AnvilHost::mid_hook_at",
][::core::mem::offset_of!(AnvilHost, mid_hook_at) - 112usize];
[
"Offset of field: AnvilHost::remove",
][::core::mem::offset_of!(AnvilHost, remove) - 120usize];
[
"Offset of field: AnvilHost::begin_group",
][::core::mem::offset_of!(AnvilHost, begin_group) - 128usize];
[
"Offset of field: AnvilHost::commit_group",
][::core::mem::offset_of!(AnvilHost, commit_group) - 136usize];
[
"Offset of field: AnvilHost::abort_group",
][::core::mem::offset_of!(AnvilHost, abort_group) - 144usize];
[
"Offset of field: AnvilHost::address_of",
][::core::mem::offset_of!(AnvilHost, address_of) - 152usize];
[
"Offset of field: AnvilHost::symbol_value",
][::core::mem::offset_of!(AnvilHost, symbol_value) - 160usize];
[
"Offset of field: AnvilHost::setting_bool",
][::core::mem::offset_of!(AnvilHost, setting_bool) - 168usize];
[
"Offset of field: AnvilHost::setting_int",
][::core::mem::offset_of!(AnvilHost, setting_int) - 176usize];
[
"Offset of field: AnvilHost::setting_float",
][::core::mem::offset_of!(AnvilHost, setting_float) - 184usize];
[
"Offset of field: AnvilHost::setting_string",
][::core::mem::offset_of!(AnvilHost, setting_string) - 192usize];
[
"Offset of field: AnvilHost::subscribe_setting",
][::core::mem::offset_of!(AnvilHost, subscribe_setting) - 200usize];
[
"Offset of field: AnvilHost::register_service",
][::core::mem::offset_of!(AnvilHost, register_service) - 208usize];
[
"Offset of field: AnvilHost::get_service",
][::core::mem::offset_of!(AnvilHost, get_service) - 216usize];
[
"Offset of field: AnvilHost::subscribe",
][::core::mem::offset_of!(AnvilHost, subscribe) - 224usize];
[
"Offset of field: AnvilHost::publish",
][::core::mem::offset_of!(AnvilHost, publish) - 232usize];
};