forked from KolibriOS/kolibrios
1834e6d8f6
git-svn-id: svn://kolibrios.org@5621 a494cfbc-eb01-0410-851d-a64ba20cac60
125 lines
3.1 KiB
C
125 lines
3.1 KiB
C
//Asper
|
|
#ifndef INCLUDE_LIBIMG_H
|
|
#define INCLUDE_LIBIMG_H
|
|
|
|
#ifndef INCLUDE_KOLIBRI_H
|
|
#include "../lib/kolibri.h"
|
|
#endif
|
|
|
|
#ifndef INCLUDE_MEM_H
|
|
#include "../lib/mem.h"
|
|
#endif
|
|
|
|
#ifndef INCLUDE_DLL_H
|
|
#include "../lib/dll.h"
|
|
#endif
|
|
|
|
#ifndef INCLUDE_LIBIO_H
|
|
#include "../lib/obj/libio_lib.h"
|
|
#endif
|
|
|
|
:byte init_imglib_check;
|
|
|
|
//library
|
|
dword libimg = #alibimg;
|
|
char alibimg[21] = "/sys/lib/libimg.obj\0";
|
|
?define LIB_IMG_LOAD_ERR "Error while loading library /rd/1/lib/libimg.obj"
|
|
|
|
dword libimg_init = #alibimg_init;
|
|
dword img_is_img = #aimg_is_img;
|
|
dword img_to_rgb2 = #aimg_to_rgb2;
|
|
dword img_decode = #aimg_decode;
|
|
dword img_destroy = #aimg_destroy;
|
|
dword img_draw = #aimg_draw;
|
|
//dword img_flip = #aimg_flip;
|
|
//dword img_rotate = #aimg_rotate;
|
|
$DD 2 dup 0
|
|
|
|
//import libimg , \
|
|
char alibimg_init[9] = "lib_init\0";
|
|
char aimg_is_img[11] = "img_is_img\0";
|
|
char aimg_to_rgb2[12] = "img_to_rgb2\0";
|
|
char aimg_decode[11] = "img_decode\0";
|
|
char aimg_destroy[12] = "img_destroy\0";
|
|
char aimg_draw[9] = "img_draw\0";
|
|
//char aimg_flip[9] = "img_flip\0";
|
|
//char aimg_rotate[11] = "img_rotate\0 ";
|
|
|
|
|
|
|
|
dword load_image(dword filename)
|
|
{
|
|
//align 4
|
|
dword img_data=0;
|
|
dword img_data_len=0;
|
|
dword fh=0;
|
|
dword image=0;
|
|
|
|
byte tmp_buf[40];
|
|
$and img_data, 0
|
|
//$mov eax, filename
|
|
//$push eax
|
|
//invoke file.open, eax, O_READ
|
|
file_open stdcall (filename, O_READ);
|
|
$or eax, eax
|
|
$jnz loc05
|
|
$stc
|
|
return 0;
|
|
@loc05:
|
|
$mov fh, eax
|
|
//invoke file.size
|
|
file_size stdcall (filename);
|
|
$mov img_data_len, ebx
|
|
//stdcall mem.Alloc, ebx
|
|
mem_Alloc(EBX);
|
|
|
|
$test eax, eax
|
|
$jz error_close
|
|
$mov img_data, eax
|
|
//invoke file.read, [fh], eax, [img_data_len]
|
|
file_read stdcall (fh, EAX, img_data_len);
|
|
$cmp eax, -1
|
|
$jz error_close
|
|
$cmp eax, img_data_len
|
|
$jnz error_close
|
|
//invoke file.close, [fh]
|
|
file_close stdcall (fh);
|
|
$inc eax
|
|
$jz error_
|
|
//; img.decode checks for img.is_img
|
|
//; //invoke img.is_img, [img_data], [img_data_len]
|
|
//; $or eax, eax
|
|
//; $jz exit
|
|
//invoke img.decode, [img_data], [img_data_len], 0
|
|
EAX=img_data;
|
|
img_decode stdcall (EAX, img_data_len,0);
|
|
$or eax, eax
|
|
$jz error_
|
|
$cmp image, 0
|
|
$pushf
|
|
$mov image, eax
|
|
//call init_frame
|
|
$popf
|
|
//call update_image_sizes
|
|
mem_Free(img_data);//free_img_data(img_data);
|
|
$clc
|
|
return image;
|
|
|
|
@error_free:
|
|
//invoke img.destroy, [image]
|
|
img_destroy stdcall (image);
|
|
$jmp error_
|
|
|
|
@error_pop:
|
|
$pop eax
|
|
$jmp error_
|
|
@error_close:
|
|
//invoke file.close, [fh]
|
|
file_close stdcall (fh);
|
|
@error_:
|
|
mem_Free(img_data);
|
|
$stc
|
|
return 0;
|
|
}
|
|
|
|
#endif |