Subversion Repositories Kolibri OS

Rev

Rev 5499 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5499 Rev 5598
1
//Asper
1
//Asper
-
 
2
#ifndef INCLUDE_LIBIMG_H
-
 
3
#define INCLUDE_LIBIMG_H
-
 
4
 
-
 
5
#ifndef INCLUDE_KOLIBRI_H
-
 
6
#include "../lib/kolibri.h"
-
 
7
#endif
-
 
8
 
-
 
9
#ifndef INCLUDE_MEM_H
-
 
10
#include "../lib/mem.h"
-
 
11
#endif
-
 
12
 
-
 
13
#ifndef INCLUDE_DLL_H
-
 
14
#include "../lib/dll.h"
-
 
15
#endif
-
 
16
 
-
 
17
#ifndef INCLUDE_LIBIO_H
-
 
18
#include "../lib/obj/libio_lib.h"
-
 
19
#endif
-
 
20
 
-
 
21
:byte init_imglib_check;
2
 
22
 
3
//library
23
//library
4
dword libimg = #alibimg;
24
dword libimg = #alibimg;
5
char alibimg[21] = "/sys/lib/libimg.obj\0";
25
char alibimg[21] = "/sys/lib/libimg.obj\0";
6
 
26
 
7
dword libimg_init = #alibimg_init;
27
dword libimg_init = #alibimg_init;
8
dword img_is_img  = #aimg_is_img;
28
dword img_is_img  = #aimg_is_img;
9
dword img_to_rgb2 = #aimg_to_rgb2;
29
dword img_to_rgb2 = #aimg_to_rgb2;
10
dword img_decode  = #aimg_decode;
30
dword img_decode  = #aimg_decode;
11
dword img_destroy = #aimg_destroy;
31
dword img_destroy = #aimg_destroy;
12
dword img_draw    = #aimg_draw;
32
dword img_draw    = #aimg_draw;
13
//dword img_flip    = #aimg_flip;
33
//dword img_flip    = #aimg_flip;
14
//dword img_rotate  = #aimg_rotate;
34
//dword img_rotate  = #aimg_rotate;
15
$DD 2 dup 0
35
$DD 2 dup 0
16
 
36
 
17
//import  libimg                     , \
37
//import  libimg                     , \
18
char alibimg_init[9] = "lib_init\0";
38
char alibimg_init[9] = "lib_init\0";
19
char aimg_is_img[11]  = "img_is_img\0";
39
char aimg_is_img[11]  = "img_is_img\0";
20
char aimg_to_rgb2[12] = "img_to_rgb2\0";
40
char aimg_to_rgb2[12] = "img_to_rgb2\0";
21
char aimg_decode[11]  = "img_decode\0";
41
char aimg_decode[11]  = "img_decode\0";
22
char aimg_destroy[12] = "img_destroy\0";
42
char aimg_destroy[12] = "img_destroy\0";
23
char aimg_draw[9]    = "img_draw\0";
43
char aimg_draw[9]    = "img_draw\0";
24
//char aimg_flip[9]    = "img_flip\0";
44
//char aimg_flip[9]    = "img_flip\0";
25
//char aimg_rotate[11]  = "img_rotate\0 ";
45
//char aimg_rotate[11]  = "img_rotate\0 ";
26
 
46
 
27
 
47
 
28
 
48
 
29
dword load_image(dword filename)
49
dword load_image(dword filename)
30
{
50
{
31
        //align 4
51
        //align 4
32
        dword img_data=0;
52
        dword img_data=0;
33
        dword img_data_len=0;
53
        dword img_data_len=0;
34
        dword fh=0;
54
        dword fh=0;
35
        dword image=0;
55
        dword image=0;
36
 
56
 
37
        byte tmp_buf[40];
57
        byte tmp_buf[40];
38
        $and     img_data, 0
58
        $and     img_data, 0
39
        //$mov     eax, filename
59
        //$mov     eax, filename
40
        //$push    eax        
60
        //$push    eax        
41
        //invoke  file.open, eax, O_READ
61
        //invoke  file.open, eax, O_READ
42
        file_open stdcall (filename, O_READ);
62
        file_open stdcall (filename, O_READ);
43
        $or      eax, eax
63
        $or      eax, eax
44
        $jnz      loc05  
64
        $jnz      loc05  
45
        $stc
65
        $stc
46
        return 0;
66
        return 0;
47
    @loc05:    
67
    @loc05:    
48
        $mov     fh, eax
68
        $mov     fh, eax
49
        //invoke  file.size
69
        //invoke  file.size
50
        file_size stdcall (filename);
70
        file_size stdcall (filename);
51
        $mov     img_data_len, ebx
71
        $mov     img_data_len, ebx
52
        //stdcall mem.Alloc, ebx
72
        //stdcall mem.Alloc, ebx
53
        mem_Alloc(EBX);
73
        mem_Alloc(EBX);
54
        
74
        
55
        $test    eax, eax
75
        $test    eax, eax
56
        $jz      error_close
76
        $jz      error_close
57
        $mov     img_data, eax
77
        $mov     img_data, eax
58
        //invoke  file.read, [fh], eax, [img_data_len]
78
        //invoke  file.read, [fh], eax, [img_data_len]
59
        file_read stdcall (fh, EAX, img_data_len);
79
        file_read stdcall (fh, EAX, img_data_len);
60
        $cmp     eax, -1
80
        $cmp     eax, -1
61
        $jz      error_close
81
        $jz      error_close
62
        $cmp     eax, img_data_len
82
        $cmp     eax, img_data_len
63
        $jnz     error_close
83
        $jnz     error_close
64
        //invoke  file.close, [fh]
84
        //invoke  file.close, [fh]
65
        file_close stdcall (fh);
85
        file_close stdcall (fh);
66
        $inc     eax
86
        $inc     eax
67
        $jz      error_
87
        $jz      error_
68
//; img.decode checks for img.is_img
88
//; img.decode checks for img.is_img
69
//;       //invoke  img.is_img, [img_data], [img_data_len]
89
//;       //invoke  img.is_img, [img_data], [img_data_len]
70
//;       $or      eax, eax
90
//;       $or      eax, eax
71
//;       $jz      exit
91
//;       $jz      exit
72
        //invoke  img.decode, [img_data], [img_data_len], 0
92
        //invoke  img.decode, [img_data], [img_data_len], 0
73
        EAX=img_data;
93
        EAX=img_data;
74
        img_decode stdcall (EAX, img_data_len,0);
94
        img_decode stdcall (EAX, img_data_len,0);
75
        $or      eax, eax
95
        $or      eax, eax
76
        $jz      error_
96
        $jz      error_
77
        $cmp     image, 0
97
        $cmp     image, 0
78
        $pushf
98
        $pushf
79
        $mov     image, eax
99
        $mov     image, eax
80
        //call    init_frame
100
        //call    init_frame
81
        $popf
101
        $popf
82
        //call    update_image_sizes
102
        //call    update_image_sizes
83
        mem_Free(img_data);//free_img_data(img_data);
103
        mem_Free(img_data);//free_img_data(img_data);
84
        $clc
104
        $clc
85
        return image;
105
        return image;
86
 
106
 
87
@error_free:
107
@error_free:
88
        //invoke  img.destroy, [image]
108
        //invoke  img.destroy, [image]
89
        img_destroy stdcall (image);
109
        img_destroy stdcall (image);
90
        $jmp     error_
110
        $jmp     error_
91
 
111
 
92
@error_pop:
112
@error_pop:
93
        $pop     eax
113
        $pop     eax
94
        $jmp     error_
114
        $jmp     error_
95
@error_close:
115
@error_close:
96
        //invoke  file.close, [fh]
116
        //invoke  file.close, [fh]
97
        file_close stdcall (fh);
117
        file_close stdcall (fh);
98
@error_:
118
@error_:
99
        mem_Free(img_data);
119
        mem_Free(img_data);
100
        $stc
120
        $stc
101
        return 0;
121
        return 0;
102
}
122
}
-
 
123
 
-
 
124
#endif
103
125