forked from KolibriOS/kolibrios
345 lines
6.1 KiB
PHP
345 lines
6.1 KiB
PHP
|
;---------------------------------------------------------------------
|
|||
|
RAW1_processing:
|
|||
|
; mov ebx,[raw_pointer]
|
|||
|
; mov eax,[ebx+16]
|
|||
|
; mov [raw_pointer],eax
|
|||
|
; jmp convert.all_ok
|
|||
|
xor eax,eax
|
|||
|
mov [Repeat_N],eax
|
|||
|
inc eax
|
|||
|
mov [RAW1_flag],al
|
|||
|
|
|||
|
mov ebx,[raw_pointer]
|
|||
|
mov [RAW1_pointer],ebx
|
|||
|
mov eax,[ebx+4]
|
|||
|
mov [Total_Repeat_N],eax
|
|||
|
cmp eax,1
|
|||
|
jne @f
|
|||
|
xor eax,eax
|
|||
|
mov [RAW1_flag],al
|
|||
|
@@:
|
|||
|
; mov [test1],eax
|
|||
|
mov eax,[ebx+8]
|
|||
|
mov [img_width],eax
|
|||
|
mov [img_width_2],eax
|
|||
|
; mov [test1],eax
|
|||
|
mov ecx,[ebx+12]
|
|||
|
mov [img_high],ecx
|
|||
|
mov [img_high_2],ecx
|
|||
|
; mov [test2],ecx
|
|||
|
imul ecx,eax
|
|||
|
|
|||
|
; mov eax,ecx
|
|||
|
; shl ecx,1
|
|||
|
; add ecx,eax
|
|||
|
shl ecx,2
|
|||
|
|
|||
|
add ecx,256*4
|
|||
|
add ecx,44
|
|||
|
push ecx
|
|||
|
|
|||
|
mcall 68,12
|
|||
|
|
|||
|
mov [raw_pointer],eax
|
|||
|
mov ebx,[RAW1_pointer]
|
|||
|
mov ecx,[ebx+8]
|
|||
|
mov [eax+4],ecx ; x
|
|||
|
mov ecx,[ebx+12]
|
|||
|
mov [eax+8],ecx ; y
|
|||
|
mov [eax+12],dword 32 ;8
|
|||
|
mov [eax+20],dword 44
|
|||
|
mov [eax+24],dword 1024
|
|||
|
mov [eax+28],dword 44+1024
|
|||
|
; mov [eax+32],
|
|||
|
|
|||
|
; mov [img_palette],eax
|
|||
|
add eax,44+1024
|
|||
|
mov [soi],eax
|
|||
|
pop ecx
|
|||
|
|
|||
|
cmp [Total_Repeat_N],1
|
|||
|
je @f
|
|||
|
|
|||
|
sub ecx,44+1024
|
|||
|
mov [RAW1_size],ecx
|
|||
|
mov edi,[soi]
|
|||
|
mov eax,-1
|
|||
|
shr ecx,2
|
|||
|
cld
|
|||
|
rep stosd
|
|||
|
|
|||
|
mov ecx,[RAW1_size]
|
|||
|
mcall 68,12
|
|||
|
mov [previous_frame_pointer],eax
|
|||
|
@@:
|
|||
|
mov [img_resolution_2],8
|
|||
|
mov [img_resolution],32
|
|||
|
|
|||
|
call copy_next_frame
|
|||
|
|
|||
|
; inc [Repeat_N]
|
|||
|
; call copy_next_frame
|
|||
|
; inc [Repeat_N]
|
|||
|
; call copy_next_frame
|
|||
|
; mov [Repeat_N],0
|
|||
|
|
|||
|
jmp convert.img_resolution_ok
|
|||
|
;---------------------------------------------------------------------
|
|||
|
copy_next_frame:
|
|||
|
mov eax,[RAW1_pointer]
|
|||
|
mov ebx,[eax+8]
|
|||
|
mov [RAW1_size_x],ebx
|
|||
|
|
|||
|
mov eax,[Repeat_N]
|
|||
|
shl eax,4
|
|||
|
; eax = (start of current Repeat_N) - 16
|
|||
|
add eax,[RAW1_pointer]
|
|||
|
mov esi,[eax+16]
|
|||
|
|
|||
|
; esi = pointer to current RAW
|
|||
|
; mov ebx,[RAW1_pointer]
|
|||
|
mov edi,[RAW1_size_x] ;[ebx+8]
|
|||
|
mov ebx,[eax+24]
|
|||
|
shl ebx,2
|
|||
|
imul edi,ebx
|
|||
|
mov ebx,[eax+20]
|
|||
|
shl ebx,2
|
|||
|
add edi,ebx
|
|||
|
; add edi,[raw_pointer]
|
|||
|
; add edi,44
|
|||
|
add edi,[soi]
|
|||
|
; edi = pointer to start for current frame
|
|||
|
mov ebx,[eax+28]
|
|||
|
|
|||
|
test bx,bx
|
|||
|
jnz @f
|
|||
|
; inc ebx
|
|||
|
mov bx,10
|
|||
|
@@:
|
|||
|
mov [Frame_delay],bx
|
|||
|
shr ebx,16
|
|||
|
mov [Transp_index],bh
|
|||
|
|
|||
|
mov al,bl
|
|||
|
shr al,2
|
|||
|
and al,111b
|
|||
|
mov [Disposal_Method],al
|
|||
|
; cmp al,2
|
|||
|
; jne @f
|
|||
|
; call save_previous_frame
|
|||
|
;@@:
|
|||
|
cmp al,3
|
|||
|
jne @f
|
|||
|
call save_previous_frame
|
|||
|
@@:
|
|||
|
and bl,1b
|
|||
|
mov [Transp_flag],bl
|
|||
|
|
|||
|
mov ebx,[esi+4] ; X size og current frame
|
|||
|
mov ecx,[esi+8] ; Y size og current frame
|
|||
|
|
|||
|
mov eax,[esi+20]
|
|||
|
add eax,esi
|
|||
|
mov [img_palette],eax
|
|||
|
|
|||
|
pusha
|
|||
|
mov ebx,[raw_pointer]
|
|||
|
mov edi,[ebx+20]
|
|||
|
add edi,ebx
|
|||
|
mov esi,eax
|
|||
|
mov ecx,256
|
|||
|
xor eax,eax
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
popa
|
|||
|
|
|||
|
mov eax,[esi+28]
|
|||
|
add esi,eax
|
|||
|
.y:
|
|||
|
push edi
|
|||
|
push ebx
|
|||
|
.x:
|
|||
|
cld
|
|||
|
lodsb
|
|||
|
cmp [Transp_flag],0
|
|||
|
je @f
|
|||
|
cmp [Transp_index],al
|
|||
|
jne @f
|
|||
|
; cmp [Disposal_Method],2
|
|||
|
; jne .not_disposal_backgr
|
|||
|
; mov [edi],dword -1 ; 0xff
|
|||
|
; inc edi
|
|||
|
;.not_disposal_backgr:
|
|||
|
add edi,4
|
|||
|
jmp .no_store
|
|||
|
@@:
|
|||
|
push ebx edi
|
|||
|
mov ebx,[raw_pointer]
|
|||
|
mov edi,[ebx+20]
|
|||
|
add edi,ebx
|
|||
|
and eax,0xff
|
|||
|
shl eax,2
|
|||
|
add edi,eax
|
|||
|
mov eax,[edi]
|
|||
|
pop edi ebx
|
|||
|
stosd
|
|||
|
.no_store:
|
|||
|
dec ebx
|
|||
|
jnz .x
|
|||
|
|
|||
|
pop ebx
|
|||
|
pop edi
|
|||
|
mov eax,[RAW1_size_x]
|
|||
|
shl eax,2
|
|||
|
add edi,eax
|
|||
|
dec ecx
|
|||
|
jnz .y
|
|||
|
inc [Repeat_N]
|
|||
|
mov eax,[Repeat_N]
|
|||
|
; mov [test2],eax
|
|||
|
cmp [Total_Repeat_N],eax
|
|||
|
ja @f
|
|||
|
xor eax,eax
|
|||
|
mov [Repeat_N],eax
|
|||
|
@@:
|
|||
|
mcall 26,9
|
|||
|
movzx ebx,word [Frame_delay]
|
|||
|
add eax,ebx
|
|||
|
mov [Animation_timer],eax
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
animation_handler:
|
|||
|
mcall 23,1
|
|||
|
; pusha
|
|||
|
; mcall 26,9
|
|||
|
; cmp [Animation_timer],eax
|
|||
|
; ja @f
|
|||
|
; call .draw_image
|
|||
|
;@@:
|
|||
|
; popa
|
|||
|
cmp [open_file_flag],1
|
|||
|
je kopen_1
|
|||
|
cmp [sort_directory_flag],byte 1
|
|||
|
je red_sort_directory
|
|||
|
cmp [redraw_flag],byte 1
|
|||
|
je redraw_window
|
|||
|
cmp eax,1 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?
|
|||
|
je red ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> - <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> red
|
|||
|
cmp eax,2 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?
|
|||
|
je key ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> - <EFBFBD><EFBFBD> key
|
|||
|
cmp eax,3 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?
|
|||
|
je button ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> - <EFBFBD><EFBFBD> button
|
|||
|
cmp eax,6
|
|||
|
je mouse
|
|||
|
mcall 26,9
|
|||
|
cmp [Animation_timer],eax
|
|||
|
ja animation_handler ;@f
|
|||
|
.1:
|
|||
|
call .draw_image
|
|||
|
; mov eax,[scaling_mode]
|
|||
|
; jmp zoom_plus.2
|
|||
|
jmp still
|
|||
|
;@@:
|
|||
|
; mcall 23,1
|
|||
|
; jmp still.1
|
|||
|
;---------------------------------------------------------------------
|
|||
|
.draw_image:
|
|||
|
; mov eax,[Repeat_N]
|
|||
|
; test eax,eax
|
|||
|
; jz .first_frame
|
|||
|
mov al,[Disposal_Method]
|
|||
|
cmp al,2
|
|||
|
jne @f
|
|||
|
call restore_background
|
|||
|
jmp .first_frame
|
|||
|
@@:
|
|||
|
cmp al,3
|
|||
|
jne @f
|
|||
|
call restore_previous_frame
|
|||
|
@@:
|
|||
|
.first_frame:
|
|||
|
call copy_next_frame
|
|||
|
mov [no_fill],1
|
|||
|
call drawimage
|
|||
|
mov [no_fill],0
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
restore_background:
|
|||
|
; cmp [Transp_flag],0
|
|||
|
; je @f
|
|||
|
; pusha
|
|||
|
; mov edi,[soi]
|
|||
|
; mov eax,[fill_color] ; -1
|
|||
|
; mov ecx,[RAW1_size]
|
|||
|
; shr ecx,2
|
|||
|
; cld
|
|||
|
; rep stosd
|
|||
|
; popa
|
|||
|
; ret
|
|||
|
;@@:
|
|||
|
pusha
|
|||
|
mov eax,[Repeat_N]
|
|||
|
test eax,eax
|
|||
|
jz @f
|
|||
|
dec eax
|
|||
|
@@:
|
|||
|
shl eax,4
|
|||
|
; eax = (start of current Repeat_N) - 16
|
|||
|
add eax,[RAW1_pointer]
|
|||
|
mov esi,[eax+16]
|
|||
|
; esi = pointer to current RAW
|
|||
|
mov edi,[RAW1_size_x] ;[ebx+8]
|
|||
|
mov ebx,[eax+24]
|
|||
|
shl ebx,2
|
|||
|
imul edi,ebx
|
|||
|
mov ebx,[eax+20]
|
|||
|
shl ebx,2
|
|||
|
add edi,ebx
|
|||
|
add edi,[soi]
|
|||
|
; edi = pointer to start for current frame
|
|||
|
mov ebx,[esi+4] ; X size og current frame
|
|||
|
mov ecx,[esi+8] ; Y size og current frame
|
|||
|
.y:
|
|||
|
push edi
|
|||
|
push ebx
|
|||
|
mov eax,[fill_color]
|
|||
|
.x:
|
|||
|
cld
|
|||
|
stosd
|
|||
|
|
|||
|
dec ebx
|
|||
|
jnz .x
|
|||
|
|
|||
|
pop ebx
|
|||
|
pop edi
|
|||
|
mov eax,[RAW1_size_x]
|
|||
|
shl eax,2
|
|||
|
add edi,eax
|
|||
|
dec ecx
|
|||
|
jnz .y
|
|||
|
|
|||
|
popa
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
restore_previous_frame:
|
|||
|
pusha
|
|||
|
mov esi,[previous_frame_pointer]
|
|||
|
mov edi,[soi]
|
|||
|
mov ecx,[RAW1_size]
|
|||
|
shr ecx,2
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
popa
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
save_previous_frame:
|
|||
|
pusha
|
|||
|
mov esi,[soi]
|
|||
|
mov edi,[previous_frame_pointer]
|
|||
|
mov ecx,[RAW1_size]
|
|||
|
shr ecx,2
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
popa
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|