Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;---------------------------------------------------------------------
  2. RAW1_processing:
  3. ;    mov  ebx,[raw_pointer]
  4. ;       mov  eax,[ebx+16]
  5. ;       mov  [raw_pointer],eax
  6. ;       jmp  convert.all_ok
  7.         xor  eax,eax
  8.         mov  [Repeat_N],eax
  9.         inc  eax
  10.         mov [RAW1_flag],al
  11.  
  12.     mov  ebx,[raw_pointer]
  13.         mov  [RAW1_pointer],ebx
  14.         mov  eax,[ebx+4]
  15.         mov  [Total_Repeat_N],eax
  16.         cmp  eax,1
  17.         jne  @f
  18.         xor  eax,eax
  19.         mov [RAW1_flag],al
  20. @@:
  21. ;       mov  [test1],eax
  22.     mov  eax,[ebx+8]
  23.     mov  [img_width],eax
  24.     mov  [img_width_2],eax
  25. ;       mov  [test1],eax
  26.         mov  ecx,[ebx+12]
  27.     mov  [img_high],ecx
  28.     mov  [img_high_2],ecx
  29. ;       mov  [test2],ecx
  30.         imul ecx,eax
  31.        
  32. ;       mov  eax,ecx
  33. ;       shl  ecx,1
  34. ;       add  ecx,eax
  35.         shl  ecx,2
  36.        
  37.         add  ecx,256*4
  38.         add  ecx,44
  39.         push  ecx
  40.  
  41.         mcall 68,12
  42.  
  43.         mov  [raw_pointer],eax
  44.         mov  ebx,[RAW1_pointer]
  45.         mov  ecx,[ebx+8]
  46.         mov  [eax+4],ecx ; x
  47.         mov  ecx,[ebx+12]
  48.         mov  [eax+8],ecx ; y
  49.         mov  [eax+12],dword 32 ;8
  50.         mov  [eax+20],dword 44
  51.         mov  [eax+24],dword 1024
  52.         mov  [eax+28],dword 44+1024
  53. ;       mov  [eax+32],
  54.  
  55. ;    mov  [img_palette],eax
  56.         add   eax,44+1024
  57.     mov   [soi],eax
  58.         pop  ecx
  59.  
  60.         cmp     [Total_Repeat_N],1
  61.         je      @f
  62.  
  63.         sub  ecx,44+1024
  64.         mov  [RAW1_size],ecx
  65.         mov  edi,[soi]
  66.         mov  eax,-1
  67.         shr  ecx,2
  68.         cld
  69.         rep  stosd
  70.  
  71.         mov ecx,[RAW1_size]
  72.         mcall 68,12
  73.         mov  [previous_frame_pointer],eax
  74. @@:    
  75.     mov  [img_resolution_2],8
  76.     mov  [img_resolution],32
  77.  
  78.         call copy_next_frame
  79.  
  80. ;       inc  [Repeat_N]
  81. ;       call copy_next_frame
  82. ;       inc  [Repeat_N]
  83. ;       call copy_next_frame
  84. ;       mov  [Repeat_N],0
  85.  
  86.         jmp  convert.img_resolution_ok
  87. ;---------------------------------------------------------------------
  88. copy_next_frame:
  89.         mov  eax,[RAW1_pointer]
  90.         mov  ebx,[eax+8]
  91.         mov  [RAW1_size_x],ebx
  92.  
  93.         mov  eax,[Repeat_N]
  94.         shl  eax,4
  95.         ; eax = (start of current Repeat_N) - 16
  96.         add  eax,[RAW1_pointer]
  97.         mov  esi,[eax+16]
  98.  
  99.         ; esi = pointer to current RAW
  100. ;       mov  ebx,[RAW1_pointer]
  101.         mov  edi,[RAW1_size_x]  ;[ebx+8]
  102.         mov  ebx,[eax+24]
  103.         shl  ebx,2
  104.         imul edi,ebx
  105.         mov  ebx,[eax+20]
  106.         shl  ebx,2
  107.         add  edi,ebx
  108. ;       add edi,[raw_pointer]
  109. ;       add edi,44
  110.         add edi,[soi]
  111.         ; edi = pointer to start for current frame
  112.         mov ebx,[eax+28]
  113.  
  114.         test bx,bx
  115.         jnz  @f
  116. ;       inc  ebx
  117.         mov  bx,10
  118. @@:
  119.         mov [Frame_delay],bx
  120.         shr ebx,16
  121.         mov [Transp_index],bh
  122.        
  123.         mov al,bl
  124.         shr al,2
  125.         and al,111b
  126.         mov [Disposal_Method],al
  127. ;       cmp al,2
  128. ;       jne  @f
  129. ;       call save_previous_frame
  130. ;@@:
  131.         cmp al,3
  132.         jne  @f
  133.         call save_previous_frame
  134. @@:
  135.         and bl,1b
  136.         mov [Transp_flag],bl
  137.        
  138.         mov ebx,[esi+4] ; X size og current frame
  139.         mov ecx,[esi+8] ; Y size og current frame
  140.  
  141.         mov eax,[esi+20]
  142.         add eax,esi
  143.         mov [img_palette],eax
  144.        
  145.         pusha
  146.         mov ebx,[raw_pointer]
  147.         mov edi,[ebx+20]
  148.         add edi,ebx
  149.         mov esi,eax
  150.         mov ecx,256
  151.         xor  eax,eax
  152.         cld
  153.         rep movsd
  154.         popa
  155.        
  156.         mov eax,[esi+28]
  157.         add esi,eax
  158. .y:
  159.         push edi
  160.         push ebx
  161. .x:
  162.         cld
  163.         lodsb
  164.         cmp [Transp_flag],0
  165.         je @f
  166.         cmp [Transp_index],al
  167.         jne @f
  168. ;       cmp [Disposal_Method],2
  169. ;       jne  .not_disposal_backgr
  170. ;       mov [edi],dword -1 ; 0xff
  171. ;       inc edi
  172. ;.not_disposal_backgr:
  173.         add edi,4
  174.         jmp .no_store
  175. @@:
  176.         push ebx edi
  177.         mov ebx,[raw_pointer]
  178.         mov edi,[ebx+20]
  179.         add edi,ebx
  180.         and eax,0xff
  181.         shl eax,2
  182.         add edi,eax
  183.         mov eax,[edi]
  184.         pop edi ebx
  185.         stosd
  186. .no_store:
  187.         dec  ebx
  188.         jnz  .x
  189.  
  190.         pop  ebx
  191.         pop  edi
  192.         mov  eax,[RAW1_size_x]
  193.         shl  eax,2
  194.         add  edi,eax
  195.         dec  ecx
  196.         jnz .y
  197.         inc  [Repeat_N]
  198.         mov  eax,[Repeat_N]
  199. ;       mov  [test2],eax
  200.         cmp  [Total_Repeat_N],eax
  201.         ja   @f
  202.         xor  eax,eax
  203.         mov  [Repeat_N],eax
  204. @@:
  205.     mcall 26,9
  206.         movzx ebx,word [Frame_delay]
  207.         add eax,ebx
  208.         mov [Animation_timer],eax
  209.         ret
  210. ;---------------------------------------------------------------------
  211. animation_handler:
  212.         mcall 23,1
  213. ;       pusha
  214. ;    mcall 26,9
  215. ;       cmp   [Animation_timer],eax
  216. ;       ja   @f
  217. ;       call   .draw_image
  218. ;@@:
  219. ;       popa
  220.     cmp  [open_file_flag],1
  221.         je   kopen_1
  222.         cmp  [sort_directory_flag],byte 1
  223.         je   red_sort_directory
  224.         cmp  [redraw_flag],byte 1
  225.         je   redraw_window
  226.     cmp  eax,1  ; ïåðåðèñîâàòü îêíî ?
  227.     je     red  ; åñëè äà - íà ìåòêó red
  228.     cmp  eax,2  ; íàæàòà êëàâèøà ?
  229.     je     key  ; åñëè äà - íà key
  230.     cmp  eax,3  ; íàæàòà êíîïêà ?
  231.     je     button     ; åñëè äà - íà button
  232.     cmp   eax,6
  233.     je    mouse
  234.     mcall 26,9
  235.         cmp   [Animation_timer],eax
  236.         ja   animation_handler  ;@f
  237. .1:
  238.         call    .draw_image
  239. ;       mov  eax,[scaling_mode]
  240. ;       jmp   zoom_plus.2
  241.         jmp  still
  242. ;@@:
  243. ;       mcall 23,1
  244. ;       jmp  still.1
  245. ;---------------------------------------------------------------------
  246. .draw_image:
  247. ;       mov eax,[Repeat_N]
  248. ;       test eax,eax
  249. ;       jz  .first_frame
  250.         mov al,[Disposal_Method]
  251.         cmp al,2
  252.         jne  @f
  253.         call restore_background
  254.         jmp  .first_frame
  255. @@:
  256.         cmp al,3
  257.         jne  @f
  258.         call restore_previous_frame
  259. @@:
  260. .first_frame:
  261.         call copy_next_frame
  262.         mov  [no_fill],1
  263.         call drawimage
  264.         mov  [no_fill],0
  265.         ret
  266. ;---------------------------------------------------------------------
  267. restore_background:
  268. ;       cmp [Transp_flag],0
  269. ;       je @f
  270. ;       pusha
  271. ;       mov  edi,[soi]
  272. ;       mov  eax,[fill_color] ;  -1
  273. ;       mov  ecx,[RAW1_size]
  274. ;       shr ecx,2
  275. ;       cld
  276. ;       rep  stosd
  277. ;       popa
  278. ;       ret
  279. ;@@:
  280.         pusha
  281.         mov  eax,[Repeat_N]
  282.         test eax,eax
  283.         jz  @f
  284.         dec  eax
  285. @@:
  286.         shl  eax,4
  287.         ; eax = (start of current Repeat_N) - 16
  288.         add  eax,[RAW1_pointer]
  289.         mov  esi,[eax+16]
  290.         ; esi = pointer to current RAW
  291.         mov  edi,[RAW1_size_x]  ;[ebx+8]
  292.         mov  ebx,[eax+24]
  293.         shl  ebx,2
  294.         imul edi,ebx
  295.         mov  ebx,[eax+20]
  296.         shl  ebx,2
  297.         add  edi,ebx
  298.         add edi,[soi]
  299.         ; edi = pointer to start for current frame
  300.         mov ebx,[esi+4] ; X size og current frame
  301.         mov ecx,[esi+8] ; Y size og current frame
  302. .y:
  303.         push edi
  304.         push ebx
  305.         mov  eax,[fill_color]
  306. .x:
  307.         cld
  308.         stosd
  309.  
  310.         dec  ebx
  311.         jnz  .x
  312.  
  313.         pop  ebx
  314.         pop  edi
  315.         mov  eax,[RAW1_size_x]
  316.         shl  eax,2
  317.         add  edi,eax
  318.         dec  ecx
  319.         jnz .y
  320.        
  321.         popa
  322.         ret
  323. ;---------------------------------------------------------------------
  324. restore_previous_frame:
  325.         pusha
  326.         mov esi,[previous_frame_pointer]
  327.         mov edi,[soi]
  328.         mov ecx,[RAW1_size]
  329.         shr ecx,2
  330.         cld
  331.         rep movsd
  332.         popa
  333.         ret
  334. ;---------------------------------------------------------------------
  335. save_previous_frame:
  336.         pusha
  337.         mov esi,[soi]
  338.         mov edi,[previous_frame_pointer]
  339.         mov ecx,[RAW1_size]
  340.         shr ecx,2
  341.         cld
  342.         rep movsd
  343.         popa
  344.         ret
  345. ;---------------------------------------------------------------------