diff --git a/contrib/C_Layer/libimg/kolibri_libimg.h b/contrib/C_Layer/libimg/kolibri_libimg.h new file mode 100644 index 000000000..26a841f02 --- /dev/null +++ b/contrib/C_Layer/libimg/kolibri_libimg.h @@ -0,0 +1,30 @@ +#ifndef KOLIBRI_LIBIMG_H +#define KOLIBRI_LIBIMG_H + +int kolibri_libimg_init(void) +{ + int asm_init_status = init_libimg_asm(); + + /* just return asm_init_status? or return init_libimg_asm() ?*/ + + if(asm_init_status == 0) + return 0; + else + return 1; +} + +extern void* (*img_decode)(void *, uint32_t, uint32_t) __attribute__((__stdcall__)); +extern void* (*img_encode)(void *, uint32_t, uint32_t) __attribute__((__stdcall__)); +extern void* (*img_create)(uint32_t, uint32_t, uint32_t) __attribute__((__stdcall__)); +extern void (*img_to_rgb2)(void *, void *) __attribute__((__stdcall__)); +extern void* (*img_to_rgb)(void *) __attribute__((__stdcall__)); +extern uint32_t (*img_flip)(void *, uint32_t) __attribute__((__stdcall__)); +extern uint32_t (*img_flip_layer)(void *, uint32_t) __attribute__((__stdcall__)); +extern uint32_t (*img_rotate)(void *, uint32_t) __attribute__((__stdcall__)); +extern uint32_t (*img_rotate_layer)(void *, uint32_t) __attribute__((__stdcall__)); +extern void (*img_draw)(void *, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t ) __attribute__((__stdcall__)); +extern uint32_t (*img_count)(void *) __attribute__((__stdcall__)); +extern uint32_t (*img_destroy)(void *) __attribute__((__stdcall__)); +extern uint32_t (*img_destroy_layer)(void *) __attribute__((__stdcall__)); + +#endif /* KOLIBRI_LIBIMG_H */ diff --git a/contrib/C_Layer/libimg/loadlibimg.asm b/contrib/C_Layer/libimg/loadlibimg.asm new file mode 100644 index 000000000..94d8478fa --- /dev/null +++ b/contrib/C_Layer/libimg/loadlibimg.asm @@ -0,0 +1,78 @@ + +format coff +use32 ; Tell compiler to use 32 bit instructions + +section '.init' code ; Keep this line before includes or GCC messes up call addresses + +include '../../../programs/proc32.inc' +include '../../../programs/macros.inc' +purge section,mov,add,sub + +include '../../../programs/dll.inc' + +public init_libimg as '_init_libimg_asm' +;;; Returns 0 on success. -1 on failure. + +proc init_libimg + + mcall 68,11 + + stdcall dll.Load, @IMPORT + test eax, eax + jnz error + + mov eax, 0 + ret + +error: + mov eax, -1 + ret +endp + +@IMPORT: +library lib_libimg, 'libimg.obj' + +import lib_libimg, \ + libimg_init, 'lib_init' , \ + img_is_img, 'img_is_img' , \ + img_info, 'img_info' , \ + img_from_file, 'img_from_file', \ + img_to_file, 'img_to_file', \ + img_from_rgb, 'img_from_rgb', \ + img_to_rgb, 'img_to_rgb', \ + img_to_rgb2, 'img_to_rgb2', \ + img_decode, 'img_decode', \ + img_encode, 'img_encode', \ + img_create, 'img_create', \ + img_destroy, 'img_destroy', \ + img_destroy_layer, 'img_destroy_layer', \ + img_count, 'img_count', \ + img_lock_bits, 'img_lock_bits', \ + img_unlock_bits, 'img_unlock_bits', \ + img_flip, 'img_flip', \ + img_flip_layer, 'img_flip_layer', \ + img_rotate, 'img_rotate', \ + img_rotate_layer, 'img_rotate_layer', \ + img_draw, 'img_draw' + +public libimg_init as '_libimg_init' +; public img_is_img as '_img_is_img' +;public img_info as '_img_info' +;public img_from_file as '_img_from_file' +;public img_to_file as '_img_to_file' +;public img_from_rgb as '_img_from_rgb' +public img_to_rgb as '_img_to_rgb' +public img_to_rgb2 as '_img_to_rgb2' +public img_decode as '_img_decode' +public img_encode as '_img_encode' +public img_create as '_img_create' +public img_destroy as '_img_destroy' +public img_destroy_layer as '_img_destroy_layer' +public img_count as '_img_count' +;public img_lock_bits as '_img_lock_bits' +;public img_unlock_bits as '_img_unlock_bits' +public img_flip as '_img_flip' +public img_flip_layer as '_img_flip_layer' +public img_rotate as '_img_rotate' +public img_rotate_layer as '_img_rotate_layer' +public img_draw as '_img_draw'