Subversion Repositories Kolibri OS

Rev

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

Rev 7049 Rev 7190
1
//Asper
1
//Asper
2
#ifndef INCLUDE_LIBIMG_H
2
#ifndef INCLUDE_LIBIMG_H
3
#define INCLUDE_LIBIMG_H
3
#define INCLUDE_LIBIMG_H
4
 
4
 
5
#ifndef INCLUDE_KOLIBRI_H
5
#ifndef INCLUDE_KOLIBRI_H
6
#include "../lib/kolibri.h"
6
#include "../lib/kolibri.h"
7
#endif
7
#endif
8
 
8
 
9
#ifndef INCLUDE_MEM_H
9
#ifndef INCLUDE_MEM_H
10
#include "../lib/mem.h"
10
#include "../lib/mem.h"
11
#endif
11
#endif
12
 
12
 
13
#ifndef INCLUDE_DLL_H
13
#ifndef INCLUDE_DLL_H
14
#include "../lib/dll.h"
14
#include "../lib/dll.h"
15
#endif
15
#endif
16
 
16
 
17
#ifndef INCLUDE_LIBIO_H
17
#ifndef INCLUDE_LIBIO_H
18
#include "../lib/obj/libio.h"
18
#include "../lib/obj/libio.h"
19
#endif
19
#endif
20
 
20
 
21
:byte init_imglib_check;
21
:byte init_imglib_check;
22
 
22
 
23
//library
23
//library
24
dword libimg = #alibimg;
24
dword libimg = #alibimg;
25
char alibimg[21] = "/sys/lib/libimg.obj\0";
25
char alibimg[21] = "/sys/lib/libimg.obj\0";
26
	
26
	
27
dword libimg_init = #alibimg_init;
27
dword libimg_init = #alibimg_init;
28
dword img_is_img  = #aimg_is_img;
28
dword img_is_img  = #aimg_is_img;
29
dword img_to_rgb2 = #aimg_to_rgb2;
29
dword img_to_rgb2 = #aimg_to_rgb2;
30
dword img_decode  = #aimg_decode;
30
dword img_decode  = #aimg_decode;
31
dword img_destroy = #aimg_destroy;
31
dword img_destroy = #aimg_destroy;
32
dword img_draw    = #aimg_draw;
32
dword img_draw    = #aimg_draw;
-
 
33
dword img_create    = #aimg_create;
-
 
34
dword img_encode   = #aimg_encode;
-
 
35
 
33
//dword img_flip    = #aimg_flip;
36
//dword img_flip    = #aimg_flip;
34
//dword img_rotate  = #aimg_rotate;
37
//dword img_rotate  = #aimg_rotate;
35
$DD 2 dup 0
38
$DD 2 dup 0
36
 
39
 
37
//import  libimg                     , \
40
//import  libimg                     , \
38
char alibimg_init[9] = "lib_init\0";
41
char alibimg_init[9] = "lib_init\0";
39
char aimg_is_img[11]  = "img_is_img\0";
42
char aimg_is_img[11]  = "img_is_img\0";
40
char aimg_to_rgb2[12] = "img_to_rgb2\0";
43
char aimg_to_rgb2[12] = "img_to_rgb2\0";
41
char aimg_decode[11]  = "img_decode\0";
44
char aimg_decode[11]  = "img_decode\0";
42
char aimg_destroy[12] = "img_destroy\0";
45
char aimg_destroy[12] = "img_destroy\0";
43
char aimg_draw[9]    = "img_draw\0";
46
char aimg_draw[9]    = "img_draw\0";
-
 
47
char aimg_create[11]    = "img_create\0";
-
 
48
char aimg_encode[11]    = "img_encode\0";
44
//char aimg_flip[9]    = "img_flip\0";
49
//char aimg_flip[9]    = "img_flip\0";
45
//char aimg_rotate[11]  = "img_rotate\0 ";
50
//char aimg_rotate[11]  = "img_rotate\0 ";
-
 
51
 
-
 
52
#define LIBIMG_FORMAT_BMP       1
-
 
53
#define LIBIMG_FORMAT_ICO       2
-
 
54
#define LIBIMG_FORMAT_CUR       3
-
 
55
#define LIBIMG_FORMAT_GIF       4
-
 
56
#define LIBIMG_FORMAT_PNG       5
-
 
57
#define LIBIMG_FORMAT_JPEG      6
-
 
58
#define LIBIMG_FORMAT_TGA       7
-
 
59
#define LIBIMG_FORMAT_PCX       8
-
 
60
#define LIBIMG_FORMAT_XCF       9
-
 
61
#define LIBIMG_FORMAT_TIFF     10
-
 
62
#define LIBIMG_FORMAT_PNM      11
-
 
63
#define LIBIMG_FORMAT_WBMP     12
-
 
64
#define LIBIMG_FORMAT_XBM      13
-
 
65
#define LIBIMG_FORMAT_Z80      14
-
 
66
 
-
 
67
struct _Image
-
 
68
{
-
 
69
   dword Checksum; // ((Width ROL 16) OR Height) XOR Data[0]        ; ignored so far
-
 
70
   dword Width;
-
 
71
   dword Height;
-
 
72
   dword Next;
-
 
73
   dword Previous;
-
 
74
   dword Type;     // one of Image.bppN
-
 
75
   dword Data;
-
 
76
   dword Palette;  // used iff Type eq Image.bpp1, Image.bpp2, Image.bpp4 or Image.bpp8i
-
 
77
   dword Extended;
-
 
78
   dword Flags;    // bitfield
-
 
79
   dword Delay;    // used iff Image.IsAnimated is set in Flags
-
 
80
};
-
 
81
 
-
 
82
// values for Image.Type
-
 
83
// must be consecutive to allow fast switch on Image.Type in support functions
-
 
84
#define Image_bpp8i  1  // indexed
-
 
85
#define Image_bpp24  2
-
 
86
#define Image_bpp32  3
-
 
87
#define Image_bpp15  4
-
 
88
#define Image_bpp16  5
-
 
89
#define Image_bpp1   6
-
 
90
#define Image_bpp8g  7  // grayscale
-
 
91
#define Image_bpp2i  8
-
 
92
#define Image_bpp4i  9
46
 
93
#define Image_bpp8a 10  // grayscale with alpha channel; application layer only!!! kernel doesn't handle this image type, libimg can only create and destroy such images
47
 
94
 
48
 
95
 
49
dword load_image(dword filename)
96
dword load_image(dword filename)
50
{
97
{
51
        //align 4
98
        //align 4
52
        dword img_data=0;
99
        dword img_data=0;
53
        dword img_data_len=0;
100
        dword img_data_len=0;
54
        dword fh=0;
101
        dword fh=0;
55
        dword image=0;
102
        dword image=0;
56
 
103
 
57
        byte tmp_buf[40];
104
        byte tmp_buf[40];
58
        $and     img_data, 0
105
        $and     img_data, 0
59
        //$mov     eax, filename
106
        //$mov     eax, filename
60
        //$push    eax        
107
        //$push    eax        
61
        //invoke  file.open, eax, O_READ
108
        //invoke  file.open, eax, O_READ
62
        file_open stdcall (filename, O_READ);
109
        file_open stdcall (filename, O_READ);
63
        $or      eax, eax
110
        $or      eax, eax
64
        $jnz      loc05  
111
        $jnz      loc05  
65
        $stc
112
        $stc
66
        return 0;
113
        return 0;
67
    @loc05:    
114
    @loc05:    
68
        $mov     fh, eax
115
        $mov     fh, eax
69
        //invoke  file.size
116
        //invoke  file.size
70
        file_size stdcall (filename);
117
        file_size stdcall (filename);
71
        $mov     img_data_len, ebx
118
        $mov     img_data_len, ebx
72
        //stdcall mem.Alloc, ebx
119
        //stdcall mem.Alloc, ebx
73
        mem_Alloc(EBX);
120
        mem_Alloc(EBX);
74
        
121
        
75
        $test    eax, eax
122
        $test    eax, eax
76
        $jz      error_close
123
        $jz      error_close
77
        $mov     img_data, eax
124
        $mov     img_data, eax
78
        //invoke  file.read, [fh], eax, [img_data_len]
125
        //invoke  file.read, [fh], eax, [img_data_len]
79
        file_read stdcall (fh, EAX, img_data_len);
126
        file_read stdcall (fh, EAX, img_data_len);
80
        $cmp     eax, -1
127
        $cmp     eax, -1
81
        $jz      error_close
128
        $jz      error_close
82
        $cmp     eax, img_data_len
129
        $cmp     eax, img_data_len
83
        $jnz     error_close
130
        $jnz     error_close
84
        //invoke  file.close, [fh]
131
        //invoke  file.close, [fh]
85
        file_close stdcall (fh);
132
        file_close stdcall (fh);
86
        $inc     eax
133
        $inc     eax
87
        $jz      error_
134
        $jz      error_
88
//; img.decode checks for img.is_img
135
//; img.decode checks for img.is_img
89
//;       //invoke  img.is_img, [img_data], [img_data_len]
136
//;       //invoke  img.is_img, [img_data], [img_data_len]
90
//;       $or      eax, eax
137
//;       $or      eax, eax
91
//;       $jz      exit
138
//;       $jz      exit
92
        //invoke  img.decode, [img_data], [img_data_len], 0
139
        //invoke  img.decode, [img_data], [img_data_len], 0
93
        EAX=img_data;
140
        EAX=img_data;
94
        img_decode stdcall (EAX, img_data_len,0);
141
        img_decode stdcall (EAX, img_data_len,0);
95
        $or      eax, eax
142
        $or      eax, eax
96
        $jz      error_
143
        $jz      error_
97
        $cmp     image, 0
144
        $cmp     image, 0
98
        $pushf
145
        $pushf
99
        $mov     image, eax
146
        $mov     image, eax
100
        //call    init_frame
147
        //call    init_frame
101
        $popf
148
        $popf
102
        //call    update_image_sizes
149
        //call    update_image_sizes
103
        mem_Free(img_data);//free_img_data(img_data);
150
        mem_Free(img_data);//free_img_data(img_data);
104
        $clc
151
        $clc
105
        return image;
152
        return image;
106
 
153
 
107
@error_free:
154
@error_free:
108
        //invoke  img.destroy, [image]
155
        //invoke  img.destroy, [image]
109
        img_destroy stdcall (image);
156
        img_destroy stdcall (image);
110
        $jmp     error_
157
        $jmp     error_
111
 
158
 
112
@error_pop:
159
@error_pop:
113
        $pop     eax
160
        $pop     eax
114
        $jmp     error_
161
        $jmp     error_
115
@error_close:
162
@error_close:
116
        //invoke  file.close, [fh]
163
        //invoke  file.close, [fh]
117
        file_close stdcall (fh);
164
        file_close stdcall (fh);
118
@error_:
165
@error_:
119
        mem_Free(img_data);
166
        mem_Free(img_data);
120
        $stc
167
        $stc
121
        return 0;
168
        return 0;
122
}
169
}
123
 
170
 
124
void DrawLibImage(dword image_pointer,x,y,w,h,offx,offy) {
171
void DrawLibImage(dword image_pointer,x,y,w,h,offx,offy) {
125
    img_draw stdcall (
172
    img_draw stdcall (
126
        image_pointer, 
173
        image_pointer, 
127
        x, 
174
        x, 
128
        y, 
175
        y, 
129
        w, 
176
        w, 
130
        h, 
177
        h, 
131
        offx, 
178
        offx, 
132
        offy
179
        offy
133
    );  
180
    );  
134
}
181
}
-
 
182
 
-
 
183
dword create_image(dword type, dword width, dword height) {
-
 
184
	img_create stdcall(width, height, type);
-
 
185
	return EAX;
-
 
186
}
-
 
187
 
-
 
188
// size - output parameter, error code / the size of encoded data
-
 
189
dword encode_image(dword image_ptr, dword options, dword specific_options, dword* size) {
-
 
190
	img_encode stdcall(image_ptr, options, specific_options);
-
 
191
	ESDWORD[size] = ECX;
-
 
192
	
-
 
193
	return EAX;
-
 
194
}
135
 
195
 
136
#endif
196
#endif