;---------------------------------------------------------------------
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	; ������������ ���� ?
    je     red	; ���� �� - �� ����� red
    cmp  eax,2	; ������ ������� ?
    je     key	; ���� �� - �� key
    cmp  eax,3	; ������ ������ ?
    je     button     ; ���� �� - �� 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
;---------------------------------------------------------------------