1use crate::color::{Color8, ColorF, Color16};
9use crate::image::Image;
10use crate::time;
11use core::ffi::c_void;
12use core::ffi::c_char;
13use core::ffi::c_uchar;
14use core::ffi::c_int;
15use core::ffi::c_uint;
16
17
18
19extern "C" {
22 pub fn lexlibCFileMap(file: *mut libc::FILE) -> *mut c_void;
23 pub fn lexlibCFileMode(file: *mut libc::FILE) -> u8;
24 pub fn lexlibCFileSize(file: *mut libc::FILE) -> i64;
25 pub fn lexlibCFileType(file: *mut libc::FILE) -> u16;
26}
27
28pub const LEXLIB_ADD: u8 = 0x01;
37pub const LEXLIB_SUB: u8 = 0x02;
38pub const LEXLIB_MUL: u8 = 0x04;
39pub const LEXLIB_DIV: u8 = 0x08;
40pub const LEXLIB_MOD: u8 = 0x10;
41pub const LEXLIB_BLEND: u8 = 0x80;
42
43pub const LEXLIB_COLOR_MIN: u8 = 0x00;
45pub const LEXLIB_COLOR_MAX: u8 = 0xFF;
46pub const LEXLIB_COLORF_MIN: f32 = 0.0;
47pub const LEXLIB_COLORF_MAX: f32 = 1.0;
48pub const LEXLIB_COLOR16_MIN: u16 = 0x0000;
49pub const LEXLIB_COLOR16_MAX: u16 = 0xFFFF;
50
51extern "C" {
52 pub fn lexlibColorBlend(dst: Color8, src: Color8, mode: u8) -> Color8;
55 pub fn lexlibColorFBlend(dst: ColorF, src: ColorF, mode: u8) -> ColorF;
56 pub fn lexlibColor16Blend(dst: Color16, src: Color16, mode: u8) -> Color16;
57
58 pub fn lexlibColorGray(color: Color8) -> u8;
60 pub fn lexlibColorFGray(color: ColorF) -> f32;
61 pub fn lexlibColor16Gray(color: Color16) -> u16;
62
63 pub fn lexlibColorGrayAlpha(color: Color8) -> Color8;
65 pub fn lexlibColorFGrayAlpha(color: ColorF) -> ColorF;
66 pub fn lexlibColor16GrayAlpha(color: Color16) -> Color16;
67
68 pub fn lexlibColorPremultiply(color: Color8) -> Color8;
70 pub fn lexlibColorFPremultiply(color: ColorF) -> ColorF;
71 pub fn lexlibColor16Premultiply(color: Color16) -> Color16;
72
73 pub fn lexlibColorFClamp(color: ColorF) -> ColorF;
75
76 pub fn lexlibColorToF(color: Color8) -> ColorF;
78 pub fn lexlibColorTo16(color: Color8) -> Color16;
79
80 pub fn lexlibColorFTo8(color: ColorF) -> Color8;
82 pub fn lexlibColorFTo16(color: ColorF) -> Color16;
83
84 pub fn lexlibColor16To8(color: Color16) -> Color8;
86 pub fn lexlibColor16ToF(color: Color16) -> ColorF;
87}
88
89pub type LexlibBool = c_uchar;
97pub const LEXLIB_TRUE: u8 = 1;
98pub const LEXLIB_FALSE: u8 = 0;
99
100pub const LEXLIB_NONE: u8 = 0x00;
102
103pub const LEXLIB_OK: u8 = 0x00;
105pub const LEXLIB_INVALID_VALUE: u8 = 0xB0;
106pub const LEXLIB_INVALID_OPERATION: u8 = 0xB1;
107pub const LEXLIB_INVALID_REQUEST: u8 = 0xB2;
108pub const LEXLIB_INVALID_ARG: u8 = 0xB3;
109pub const LEXLIB_INVALID_DIR: u8 = 0xB4;
110pub const LEXLIB_INVALID_LEN: u8 = 0xB5;
111pub const LEXLIB_INVALID_MSG: u8 = 0xB6;
112pub const LEXLIB_INVALID_SIZE: u8 = 0xB7;
113pub const LEXLIB_INVALID_FILE: u8 = 0xB8;
114pub const LEXLIB_INVALID_PATH: u8 = 0xB9;
115pub const LEXLIB_INVALID_NAME: u8 = 0xBA;
116pub const LEXLIB_INVALID_TYPE: u8 = 0xBB;
117pub const LEXLIB_INVALID_CHAR: u8 = 0xBC;
118pub const LEXLIB_INVALID_DATA: u8 = 0xBD;
119pub const LEXLIB_CORRUPT_DATA: u8 = 0xC0;
120pub const LEXLIB_EOF: u8 = 0xC1;
121pub const LEXLIB_EXIST: u8 = 0xFF;
122pub const LEXLIB_CANT_OPEN: u8 = 0xC3;
123pub const LEXLIB_CANT_CLOSE: u8 = 0xC4;
124pub const LEXLIB_CANT_READ: u8 = 0xC5;
125pub const LEXLIB_CANT_WRITE: u8 = 0xC6;
126pub const LEXLIB_PARTIAL_READ: u8 = 0xC7;
127pub const LEXLIB_PARTIAL_WRITE: u8 = 0xC8;
128pub const LEXLIB_RESET: u8 = 0xE0;
129pub const LEXLIB_ABORT: u8 = 0xE1;
130pub const LEXLIB_BUSY: u8 = 0xE2;
131pub const LEXLIB_DENIED: u8 = 0xE3;
132pub const LEXLIB_CANCEL: u8 = 0xE4;
133pub const LEXLIB_BROKEN: u8 = 0xE5;
134pub const LEXLIB_BLOCKING: u8 = 0xE6;
135pub const LEXLIB_UNAVAILABLE: u8 = 0xE7;
136pub const LEXLIB_INTERRUPTED: u8 = 0xE8;
137pub const LEXLIB_LIMIT: u8 = 0xE9;
138pub const LEXLIB_NOT_FOUND: u8 = 0xEA;
139pub const LEXLIB_UNSUPORTED: u8 = 0xF0;
140pub const LEXLIB_OUT_OF_DISK: u8 = 0xFD;
141pub const LEXLIB_OUT_OF_MEMORY: u8 = 0xFE;
142pub const LEXLIB_ERROR: u8 = 0xFF;
143
144pub const LEXLIB_RD: u8 = 0x01;
146pub const LEXLIB_WR: u8 = 0x02;
147pub const LEXLIB_RDWR: u8 = 0x03;
148pub const LEXLIB_APPEND: u8 = 0x04;
149pub const LEXLIB_CREATE: u8 = 0x08;
150pub const LEXLIB_OVERWRITE: u8 = 0x10;
151
152#[repr(C)]
154#[allow(non_camel_case_types)]
155pub enum LexlibFileType {
156 LEXLIB_FILETYPE_UNKNOWN = 0,
157 LEXLIB_FILETYPE_BMP,
158 LEXLIB_FILETYPE_JPG,
159 LEXLIB_FILETYPE_PNG,
160 LEXLIB_FILETYPE_SCRIPT,
161}
162
163pub const LEXLIB_FLIP_X: u8 = 0x01;
169pub const LEXLIB_FLIP_Y: u8 = 0x02;
170pub const LEXLIB_ALPHA: u8 = 0x80;
171
172pub const LEXLIB_BMP_CORE: u8 = 0x0C;
173pub const LEXLIB_BMP_INFO: u8 = 0x28;
174pub const LEXLIB_BMP_INFO_V3: u8 = 0x38;
175
176extern "C" {
177 pub fn lexlibImageNew(image: *mut Image, width: u32, height: u32, colorProfile: u8, bpc: u8) -> u8;
178 pub fn lexlibImageDelete(image: *mut Image);
179 pub fn lexlibImageCopy(copy: *mut Image, original: *const Image) -> u8;
180 pub fn lexlibImageValidate(image: *const Image) -> u8;
181 pub fn lexlibImageFlip(image: *mut Image, flags: u8) -> u8;
182 pub fn lexlibImageProfileChange(image: *mut Image, profile: u8) -> u8;
183 pub fn lexlibImageFillArea(image: *mut Image, x: u32, y: u32, w: u32, h: u32, color: Color8, blendmode: u8) -> u8;
184 pub fn lexlibImagePixel(image: *const Image, x: u32, y: u32, color: *mut Color8) -> u8;
185 pub fn lexlibImagePixel16(image: *const Image, x: u32, y: u32, color: *mut Color16) -> u8;
186 pub fn lexlibImagePixelSet(image: *mut Image, x: u32, y: u32, color: Color8, blendmode: u8) -> u8;
187 pub fn lexlibImagePixel16Set(image: *mut Image, x: u32, y: u32, color: Color16, blendmode: u8) -> u8;
188 pub fn lexlibImageLoad(image: *mut Image, filename: *const c_char) -> u8;
189 pub fn lexlibImageSave(image: *const Image, filename: *const c_char) -> u8;
190 pub fn lexlibImageLoadBmp(image: *mut Image, filename: *const c_char) -> u8;
191 pub fn lexlibImageLoadBmpMem(image: *mut Image, mem: *const c_void, size: usize) -> u8;
192 pub fn lexlibImageSaveBmp(image: *const Image, filename: *const c_char) -> u8;
193 pub fn lexlibImageSaveBmpEx(image: *const Image, filename: *const c_char, profile: u8, header: u8) -> u8;
194 pub fn lexlibImageLoadPng(image: *mut Image, filename: *const c_char) -> u8;
195 pub fn lexlibImageSavePng(image: *const Image, filename: *const c_char) -> u8;
196 #[cfg(feature = "experimental")]
197 pub fn lexlibImageRepairStruct(image: *mut Image) -> u8;
198}
199extern "C" {
206 pub fn lexlibMemUnmap(mem: *mut c_void, size: usize);
207}
208
209extern "C" {
216 pub fn lexlibSleep(seconds: c_uint);
217 pub fn lexlibSleepMs(millis: c_uint);
218 pub fn lexlibRandom() -> c_uint;
219 pub fn lexlibRamSize() -> u64;
220}
221
222extern "C" {
229 pub fn lexlibStrCat(str1: *const c_char, str2: *const c_char) -> *mut c_char;
230 pub fn lexlibStrCopy(str: *const c_char) -> *mut c_char;
231 pub fn lexlibStrFile(filename: *const c_char) -> *mut c_char;
232 pub fn lexlibStrPathNew(str: *const c_char) -> *mut c_char;
233 pub fn lexlibStrPathPush(str: *mut *mut c_char, add: *const c_char) -> u8;
234 pub fn lexlibStrPathPop(str: *mut *mut c_char) -> u8;
235 pub fn lexlibStrPathAsDir(str: *mut *mut c_char) -> u8;
236 pub fn lexlibStrPathAsFile(str: *mut *mut c_char) -> u8;
237}
238
239extern "C" {
246 pub fn lexlibTimeNanos() -> u64;
247 pub fn lexlibTimeMicros() -> u64;
248 pub fn lexlibTimeMillis() -> u64;
249 pub fn lexlibTimeSeconds() -> u64;
250
251 pub fn lexlibThrdNanos() -> u64;
252 pub fn lexlibThrdMicros() -> u64;
253 pub fn lexlibThrdMillis() -> u64;
254 pub fn lexlibThrdSeconds() -> u64;
255
256 pub fn lexlibProcNanos() -> u64;
257 pub fn lexlibProcMicros() -> u64;
258 pub fn lexlibProcMillis() -> u64;
259 pub fn lexlibProcSeconds() -> u64;
260
261 pub fn lexlibTimerNew(ms: u64) -> time::Timer;
262 pub fn lexlibTimerSet(timer: *mut time::Timer, ms: u64);
263 pub fn lexlibTimerAdd(timer: *mut time::Timer, ms: u64);
264 pub fn lexlibTimerStart(timer: *mut time::Timer);
265 pub fn lexlibTimerUpdate(timer: *mut time::Timer);
266 pub fn lexlibTimerDone(timer: *mut time::Timer) -> LexlibBool;
267 pub fn lexlibTimerUntilDone(timer: *mut time::Timer);
268 pub fn lexlibTimerFinished(timer: *const time::Timer) -> LexlibBool;
269}
270
271extern "C" {
278 pub fn lexlibVecNew_(len: usize, typeSize: usize) -> *mut c_void;
279 pub fn lexlibVecDelete(vec: *mut c_void);
280 pub fn lexlibVecGet(vec: *const c_void, index: usize) -> *mut c_void;
281 pub fn lexlibVecPush_(vec: *mut *mut c_void, obj: *const c_void) -> c_int;
282 pub fn lexlibVecPop(vec: *mut c_void);
283 pub fn lexlibVecInsert_(vec: *mut *mut c_void, index: usize, obj: *mut c_void) -> c_int;
284 pub fn lexlibVecRemove(vec: *mut c_void, index: usize) -> c_int;
285 pub fn lexlibVecResize(vec: *mut *mut c_void, newcap: usize) -> c_int;
286 pub fn lexlibVecFind(vec: *const c_void, obj: *const c_void) -> *mut c_void;
287 pub fn lexlibVecSwap(vec: *mut c_void, a: usize, b: usize) -> c_int;
288 pub fn lexlibVecClear(vec: *mut c_void);
289 pub fn lexlibVecLen(vec: *const c_void) -> usize;
290 pub fn lexlibVecCap(vec: *const c_void) -> usize;
291}
292
293