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 |