1,6 → 1,7 |
; Picture browser by lisovin@26.ru |
; Modified by Ivan Poddubny - v.0.3 |
; Modified by Diamond - v.0.4 |
; Modified by Mario79 - v.0.5 18.07.08 Dinamic Allocation Memory |
; Compile with FASM for Menuet |
|
;****************************************************************************** |
10,16 → 11,17 |
dd 0x01 ; header version |
dd START ; start of code |
dd IM_END ; size of image |
dd 0x300000 ; memory for app |
dd 0x300000 ; esp |
dd I_END ;0x300000 ; memory for app |
dd I_END ;0x300000 ; esp |
dd temp_area , 0x0 ; I_Param , I_Icon |
|
include 'lang.inc' |
include '..\..\..\macros.inc' |
;include 'macros.inc' |
;****************************************************************************** |
|
START: ; start of execution |
|
mcall 68, 11 |
; check for parameters |
cmp dword [temp_area],'BOOT' |
jne .no_boot |
125,7 → 127,7 |
mov eax,51 |
mov ebx,1 |
mov ecx,thread1 |
mov edx,0x29fff0 |
mov edx,thread ;0x29fff0 |
mcall |
jmp still |
nofile: |
135,8 → 137,9 |
kopen: |
mov ecx,-1 |
call getappinfo |
mov ebx,dword [I_END+42] |
mov ecx,dword [I_END+46] |
mov eax,[image_file] |
mov ebx,dword [eax+42] |
mov ecx,dword [eax+46] |
add ebx,10*65536-15 |
add ecx,50*65536-55 |
mov edx,0xffffff |
146,7 → 149,8 |
call load_image |
|
open1: |
cmp word [I_END],word 'BM' |
mov eax,[image_file] |
cmp [eax],word 'BM' |
jne still |
call convert |
call drawimage |
162,7 → 166,7 |
mov eax,51 |
mov ebx,1 |
mov ecx,thread2 |
mov edx,0x2afff0 |
mov edx,thread-512 ;0x2afff0 |
mcall |
jmp still |
noinfo: |
177,7 → 181,7 |
mov eax,51 |
mov ebx,1 |
mov ecx,thread3 |
mov edx,0x2bfff0 |
mov edx,thread-512*2 ;0x2bfff0 |
mcall |
jmp still |
;call background |
190,11 → 194,55 |
|
|
load_image: |
mov eax, 70 |
mov ebx, fileinfo |
mcall |
mov eax,[I_END+18] |
mov ebx,[I_END+22] |
mov [fileinfo+0],dword 5 |
mov [fileinfo+12],dword 0 |
mov [fileinfo+16],dword process_info |
|
cmp [image_file],0 |
je @f |
mov ecx,[image_file] |
mcall 68, 13, |
|
@@: |
mcall 70, fileinfo |
|
mov [fileinfo+0],dword 0 |
mov [fileinfo+12],dword 512 |
mov [fileinfo+16],dword process_info+40 |
|
mcall 70, fileinfo |
|
mov ecx,[process_info+32] |
mov [fileinfo+12],ecx |
|
mov eax,[process_info+40+28] |
|
cmp eax, 24 |
jz .convert24 |
cmp eax, 8 |
jz .convert8 |
cmp eax, 4 |
jz .convert4 |
shl ecx,2 |
.convert4: |
shl ecx,1 |
.convert8: |
lea ecx,[ecx*3] |
.convert24: |
shl ecx,1 |
@@: |
|
mcall 68, 12 |
|
|
mov [fileinfo+16],eax |
mov [image_file],eax |
|
mcall 70, fileinfo |
|
mov eax,[image_file] |
mov ebx,[eax+22] |
mov eax,[eax+18] |
test ebx, ebx |
jns @f |
neg ebx |
215,39 → 263,34 |
jz @f |
mov esi,ebx |
mov edx,eax |
mov ecx,-1 |
mov ebx,-1 |
mov eax,67 |
mcall |
mcall 67,-1,-1 |
@@: |
ret |
|
|
drawimage: |
cmp word [I_END],word 'BM' |
mov eax,[image_file] |
cmp [eax],word 'BM' |
jne nodrawimage |
mov eax,7 |
mov ebx,[soi] |
mov ecx, dword [I_END+18-2] |
mov cx, [I_END+22] |
mov ecx, dword [eax+18-2] |
mov cx, [eax+22] |
test cx, cx |
jns @f |
neg cx |
@@: |
mov edx,10*65536+50 |
mcall |
mcall 7,[soi] |
nodrawimage: |
ret |
|
; |
background: |
cmp word [I_END],word 'BM' |
mov eax,[image_file] |
cmp [eax],word 'BM' |
jne @f |
mov eax,15 |
mov ebx,1 |
mov ecx,[I_END+18] ; è¨à¨ |
mov edx,[I_END+22] ; ¢ëá®â |
mcall |
mov ecx,[eax+18] ; è¨à¨ |
mov edx,[eax+22] ; ¢ëá®â |
mcall 15,1 |
|
mov esi, ecx |
imul esi, edx |
268,20 → 311,23 |
ret |
|
convert: |
mov ecx, I_END |
mov ecx, [image_file] ;I_END |
add ecx, [ecx+2] |
mov [soi], ecx |
mov ebp, [I_END+18] |
mov eax,[image_file] |
mov ebp, [eax+18] |
lea ebp, [ebp*3] ; ebp = size of output scanline |
mov eax, [I_END+22] |
mov eax, [eax+22] |
dec eax |
mul ebp |
add eax, ecx |
mov edi, eax ; edi points to last scanline |
mov esi, I_END |
mov esi, [image_file] ;I_END |
add esi, [esi+10] |
mov ebx, I_END+54 |
mov edx, [I_END+22] |
; mov ebx, I_END+54 |
mov ebx,[image_file] |
mov edx, [ebx+22] |
add ebx,54 |
lea eax, [ebp*2] |
mov [delta], eax |
test edx, edx |
291,7 → 337,9 |
and [delta], 0 |
mov edi, ecx |
@@: |
movzx eax, word [I_END+28] |
; movzx eax, word [I_END+28] |
mov eax,[image_file] |
movzx eax,word [eax+28] |
cmp eax, 24 |
jz convert24 |
cmp eax, 8 |
319,7 → 367,11 |
.loopi: |
xor eax, eax |
lodsb |
cmp dword [I_END+30], 1 |
; cmp dword [I_END+30], 1 |
push eax |
mov eax,[image_file] |
cmp dword [eax+30],1 |
pop eax |
jnz .nocompressed |
.compressed: |
mov ecx, eax |
417,8 → 469,11 |
|
align_input: |
push esi |
sub esi, I_END |
sub esi, [I_END+10] |
push eax |
mov eax,[image_file] |
sub esi,eax ;I_END |
sub esi,[eax+10] |
pop eax |
neg esi |
and esi, 3 |
add [esp], esi |
449,8 → 504,8 |
xor eax,eax ; function 0 : define and draw window |
; mov ebx,350 ; [x start] *65536 + [x size] |
; mov ecx,400 ; [y start] *65536 + [y size] |
mov ebx,100*65536 |
mov ecx,100*65536 |
mov ebx,0*65536 |
mov ecx,0*65536 |
add ebx,[wnd_width] |
add ecx,[wnd_height] |
mov edx,0x03ffffff ; color of work area RRGGBB,8->color gl |
786,19 → 841,26 |
mov eax,47 |
mov edx,200*65536+40 |
mov esi,ecx |
mov ecx, [I_END+2] |
mov ecx,[image_file] |
push ecx |
mov ecx, [ecx+2] |
call digitcorrect |
mcall |
add edx,10 |
mov ecx, [I_END+18] |
pop ecx |
push ecx |
mov ecx, [ecx+18] |
call digitcorrect |
mcall |
add edx,10 |
mov ecx, [I_END+22] |
pop ecx |
push ecx |
mov ecx, [ecx+22] |
call digitcorrect |
mcall |
add edx,10 |
movzx ecx,word [I_END+28] |
pop ecx |
movzx ecx,word [ecx+28] |
call digitcorrect |
mcall |
|
1046,13 → 1108,24 |
ru, 'Ok',\ |
de, 'Ok' |
|
image_file dd 0 |
;image_file_size dd 0 |
|
pos: dd 6 |
|
;fileinfo: |
; dd 0 |
; dd 0 |
; dd 0 |
; dd 0x290000-I_END |
; dd I_END |
|
fileinfo: |
dd 5 |
dd 0 |
dd 0 |
dd 0 |
dd 0x290000-I_END |
dd I_END |
dd 0 ;x290000-I_END |
dd process_info ;I_END |
string: |
db '/sys/bgr.bmp',0 |
|
1061,5 → 1134,9 |
|
process_info: |
temp_area: |
rb 0x10000 |
rb 1024*4 |
rb 1024*2 |
;rb 0x10000 |
thread: |
rb 512 |
I_END: |