Subversion Repositories Kolibri OS

Rev

Rev 1441 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. TILE_LEN          equ 256
  2. TILE_LEN_W        equ TILE_LEN
  3. TILE_LEN_H        equ TILE_LEN
  4. RGB_TILE_SIZE_1N4 equ (TILE_LEN*TILE_LEN*3/4) ;1/4 ç áâì ¯ ¬ï⨠ª à⨭ª¨
  5. RGB_TILE_SIZE_1N2 equ (TILE_LEN*TILE_LEN*3/2) ;1/2 ç áâì ¯ ¬ï⨠ª à⨭ª¨
  6. RGB_TILE_SIZE     equ TILE_LEN*TILE_LEN*3     ;à §¬¥à 1-© ª à⨭ª¨
  7. TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;à §¬¥à bmp ä ©«  á á¨á⥬­ë¬¨ ¨ª®­ª ¬¨
  8. TREE_ICON_NOD16_BMP_SIZE equ 256*3* 1+54
  9. TILE_TEXT_MAX_LEN equ 40 ;¬ ªá¨¬ «ì­ ï ¤«¨­­  ⥪áâ  ¤«ï ¢ë¢®¤  ¨¬¥­¨ ä ©« 
  10.  
  11. FRACT_TILE_00 equ 1 ;¤à®¡­ë© ä ©«, 1/4 - ¢¥àå­¨© «¥¢ë© 㣮«
  12. FRACT_TILE_01 equ 2 ;¤à®¡­ë© ä ©«, 1/4 - ­¨¦­¨© «¥¢ë© 㣮«
  13. FRACT_TILE_10 equ 4 ;¤à®¡­ë© ä ©«, 1/4 - ¢¥àå­¨© ¯à ¢ë© 㣮«
  14. FRACT_TILE_11 equ 8 ;¤à®¡­ë© ä ©«, 1/4 - ­¨¦­¨© ¯à ¢ë© 㣮«
  15. FRACT_TILE_ALL equ 15 ;15=1+2+4+8
  16. FRACT_TILE_BIT00 equ 0
  17. FRACT_TILE_BIT01 equ 1
  18. FRACT_TILE_BIT10 equ 2
  19. FRACT_TILE_BIT11 equ 3
  20.  
  21. ;ä« £¨, ­ã¦­ë¥ ¯à¨ à áâ¢ ­¨¨:
  22. SCALE_0BIT_USE equ 8
  23. SCALE_1BIT_USE equ 9
  24. SCALE_0_USE equ 0x100 ;ä« £ ®âªàëâ¨ï ª à⨭ª¨ ⥪ã饣® ã஢­ï
  25. SCALE_1_USE equ 0x200 ;ä« £ ®âªàëâ¨ï ª à⨭ª¨ ¢ëá襣® ã஢­ï (¡ã¤¥â à áâ¢ âáï ¢ ¯à®¯à¨á®¢ª¥)
  26.  
  27. met_fr_opn db 0 ;ä« £ ®âªàëâ¨ï ä ©«  á ¬¥âª ¬¨
  28.  
  29. size_tile_struc equ 32 ;à §¬¥à áâàãªâãàë â ©« 
  30. max_tiles_cols  equ 4 ;¬ ªá¨¬ «ì­®¥ ç¨á«® â ©«®¢ ¯® è¨à¨­¥ ®ª­ 
  31. max_tiles_rows  equ 3 ;¬ ªá¨¬ «ì­®¥ ç¨á«® â ©«®¢ ¯® ¢ëá®â¥ ®ª­ 
  32. max_tiles_count equ (max_tiles_cols*max_tiles_rows) ;¬ ªá¨¬ «ì­®¥ ç¨á«® â ©«®¢ ¢ ¯à®£à ¬¬¥
  33.  
  34. tile_coord_x    equ dword[edi] ;ª®®à¤¨­ â  x (ª ª ¯ à ¬¥âà ¤«ï § £à㧪¨)
  35. tile_coord_y    equ dword[edi+ 4] ;ª®®à¤¨­ â  y (ª ª ¯ à ¬¥âà ¤«ï § £à㧪¨)
  36. tile_zoom       equ  byte[edi+ 8] ;¬ áèâ ¡ § £à㦠¥¬®£® â ©« 
  37. tile_err_f      equ  byte[edi+ 9] ;ª®¤ ®è¨¡ª¨ ¯à¨ ®âªàë⨨ ¨§®¡à ¦¥­¨ï
  38. tile_drobn      equ  word[edi+10] ;¯®«¥ ¤«ï á®åà ­¥­¨ï १ã«ìâ â®¢ ®âªàëâ¨ï ¤à®¡­ëå ª à⨭®ª
  39. tile_offs_l_load  equ 12 ;offset params last load tile
  40. tile_key_coord_x  equ dword[edi+12] ;ª®®à¤¨­ â  x (ª ª ª«îç ¯®á«¥¤­¥© § £à㧪¨)
  41. tile_key_coord_y  equ dword[edi+16] ;ª®®à¤¨­ â  y (ª ª ª«îç ¯®á«¥¤­¥© § £à㧪¨)
  42. tile_key_path_len equ  byte[edi+21] ;¤«¨­­  ⥪áâ  ¢ ¯®«¥ Cache
  43. tile_rgb_icon   equ dword[edi+22] ;㪠§ â¥«ì ­  ¡ãä¥à ¤«ï åà ­¥­¨ï ®á­®¢­®© ¨«¨ à áâï­ã⮩ ª à⨭ª¨
  44. tile_drobn_icon equ dword[edi+26] ;㪠§ â¥«ì ­  ¡ãä¥à ¤«ï åà ­¥­¨ï 4-å ¤à®¡­ëå ª à⨭®ª
  45. tile_delta_x    equ  byte[edi+30] ;ᤢ¨£ â ©«  ®â­®á¨â¥«ì­® ªãàá®à  ¯® ®á¨ x
  46. tile_delta_y    equ  byte[edi+31] ;ᤢ¨£ â ©«  ®â­®á¨â¥«ì­® ªãàá®à  ¯® ®á¨ y
  47.  
  48.  
  49. ;???
  50. align 4
  51. CursorMoveRight: ;¯¥à¥¤¢¨£ ¥¬ ª®®à¤¨­ âã ªãàá®à  ¢¯à ¢®
  52.   push ebx ecx
  53.   xor ebx,ebx
  54.   xor ecx,ecx
  55.   mov cl,byte[map.zoom]
  56.   dec ecx
  57.   cmp cx,0
  58.   jle .no_move ;¯à¨ 0-¬ ¬ áèâ ¡¥ ­¥ ¤¢¨£ ¥¬áï
  59.   @@:
  60.     rol ebx,1
  61.     or ebx,1 ;­ ª ¯«¨¢ ¥¬ ¬ ªá¨¬ «ì­ãî ª®®à¤¨­ âã, ¯à¨ ¤ ­®¬ ¬ áèâ ¡¥
  62.     loop @b
  63.   cmp dword[map.coord_x],ebx
  64.   jge .no_move ;¥á«¨ ª®®à¤¨­ â  ªà ©­ïï, ­¥ ¤¢¨£ ¥¬áï
  65.     inc dword[map.coord_x]
  66.     ;ᤢ¨£ ¥¬ á¥âªã â ©«®¢ ¢«¥¢®, çâ®-¡ë ç áâì â ©«®¢ ᮢ¯ «¨ ¨ ¯à¨è«®áì ¬¥­ìè¥ § £à㦠âì ­®¢ëå
  67.     stdcall tiles_grid_move_left, tile_00,max_tiles_count,max_tiles_cols
  68.     call but_Refresh
  69.   .no_move:
  70.   pop ecx ebx
  71.   ret
  72.  
  73. ;???
  74. align 4
  75. CursorMoveDown: ;¯¥à¥¤¢¨£ ¥¬ ª®®à¤¨­ âã ªãàá®à  ¢­¨§
  76.   push ebx ecx
  77.   xor ebx,ebx
  78.   xor ecx,ecx
  79.   mov cl,byte[map.zoom]
  80.   dec ecx
  81.   cmp cx,0
  82.   jle .no_move ;¯à¨ 0-¬ ¬ áèâ ¡¥ ­¥ ¤¢¨£ ¥¬áï
  83.   @@:
  84.     rol ebx,1
  85.     or ebx,1 ;­ ª ¯«¨¢ ¥¬ ¬ ªá¨¬ «ì­ãî ª®®à¤¨­ âã, ¯à¨ ¤ ­®¬ ¬ áèâ ¡¥
  86.     loop @b
  87.   cmp dword[map.coord_y],ebx
  88.   jge .no_move ;¥á«¨ ª®®à¤¨­ â  ªà ©­ïï, ­¥ ¤¢¨£ ¥¬áï
  89.     inc dword[map.coord_y]
  90.     ;ᤢ¨£ ¥¬ á¥âªã â ©«®¢ ¢¢¥àå
  91.     stdcall tiles_grid_move_up, tile_00,max_tiles_count,max_tiles_rows
  92.     call but_Refresh
  93.   .no_move:
  94.   pop ecx ebx
  95.   ret
  96.  
  97. ;???
  98. align 4
  99. but_met_up: ;¯¥à¥¬¥é¥­¨¥ ¬¥âª¨ ¢¢¥àå, ¯® ᯨáªã
  100.   stdcall dword[tl_node_move_up], tree2
  101.   ret
  102.  
  103. ;???
  104. align 4
  105. but_met_dn: ;¯¥à¥¬¥é¥­¨¥ ¬¥âª¨ ¢­¨§, ¯® ᯨáªã
  106.   stdcall dword[tl_node_move_down], tree2
  107.   ret
  108.  
  109. ;???
  110. align 4
  111. fun_new_map_type: ;¬¥­ï¥¬ à áè¨à¥­¨¥ ¤«ï ª àâë
  112.   push eax
  113.     stdcall dword[tl_node_get_data], tree1
  114.     pop eax
  115.     cmp eax,0
  116.     je @f
  117.       mov dword[txt_tile_type],eax
  118.     @@:
  119.   pop eax
  120.   ret
  121.  
  122. ;§ ¤ ¥¬ à á¯®«®¦¥­¨¥ â ©«®¢ ¯® á¥âª¥
  123. align 4
  124. proc tiles_init_grid, beg_tiles:dword, count:dword, cols:dword
  125.   push eax ebx ecx edx edi
  126.   xor eax,eax
  127.   xor ebx,ebx
  128.   mov edi,[beg_tiles]
  129.   mov ecx,[count]
  130.   mov edx,[cols]
  131.   @@:
  132.     mov tile_delta_x,al
  133.     mov tile_delta_y,bl
  134.     add edi,size_tile_struc
  135.     inc ax
  136.     cmp eax,edx
  137.     jl .old_lin
  138.       xor eax,eax
  139.       inc bx
  140.     .old_lin:
  141.     loop @b
  142.   pop edi edx ecx ebx eax
  143.   ret
  144. endp
  145.  
  146. ;ᤢ¨£ ¥¬ á¥âªã ¢«¥¢®, ¢ë«¥§è¨¥ á⮫¡æë ¡ã¤ãâ ¯¥à¥ª¨­ãâë ­  ¯à ¢ãî áâ®à®­ã
  147. ;äã­ªæ¨ï ­ã¦­  ¤«ï ®¯â¨¬¨§ æ¨¨ ®¡à é¥­¨ï ª ¤¨áªã, ¯à¨ ¤¢¨¦¥­¨¨ ªãàá®à  ¬ë ¤¢¨£ ¥¬
  148. ;â ©«ë ¢ ¯à®â¨¢®¯®«®¦­ãî áâ®à®­ã, ¢ १ã«ìâ â¥ ª®®à¤¨­ âë ¡®«ì設á⢠ â ©«®¢ ­¥ ¬¥­ïîâáï
  149. ;  §­ ç¨â ¯à®£à ¬¬  ­¥ ¡ã¤¥â ¯¥à¥ç¨â뢠âì ¨å § ­®¢®, 祬 ¨ ¤®á⨣ ¥âáï ®¯â¨¬¨§ æ¨ï
  150. align 4
  151. proc tiles_grid_move_left, beg_tiles:dword, count:dword, cols:dword
  152.   push eax ebx ecx edx edi
  153.   xor eax,eax
  154.   xor ebx,ebx
  155.   mov edi,[beg_tiles]
  156.   mov ecx,[count]
  157.   mov edx,[cols]
  158.   @@:
  159.     cmp tile_delta_x,0
  160.     jne .no_jump
  161.       add tile_delta_x,dl ;¥á«¨ á⮫¡¥æ = 0, â® ¤®¡ ¢«ï¥¬ 'cols' çâ®-¡ë ­¥ ¢ë« §¨« ¢«¥¢®
  162.     .no_jump:
  163.     dec tile_delta_x
  164.     add edi,size_tile_struc
  165.     loop @b
  166.   pop edi edx ecx ebx eax
  167.   ret
  168. endp
  169.  
  170. ;ᤢ¨£ ¥¬ á¥âªã ¢¯à ¢®, ¢ë«¥§è¨¥ á⮫¡æë ¡ã¤ãâ ¯¥à¥ª¨­ãâë ­  «¥¢ãî áâ®à®­ã
  171. ;¤¥« ¥â ⮦¥ çâ® ¨ tiles_grid_move_left ⮫쪮 ¤¢¨£ ¥â ª®®à¤¨­ âë ¢ ¤àã£ãî áâ®à®­ã
  172. align 4
  173. proc tiles_grid_move_right, beg_tiles:dword, count:dword, cols:dword
  174.   push eax ebx ecx edx edi
  175.   xor eax,eax
  176.   xor ebx,ebx
  177.   mov edi,[beg_tiles]
  178.   mov ecx,[count]
  179.   mov edx,[cols]
  180.   @@:
  181.     inc tile_delta_x
  182.     cmp tile_delta_x,dl
  183.     jl .no_jump
  184.       mov tile_delta_x,0 ;¥á«¨ á⮫¡¥æ = 'cols', â® áâ ¢¨¬ ¥¬ã 0 çâ®-¡ë ­¥ ¢ë« §¨« ¢¯à ¢®
  185.     .no_jump:
  186.     add edi,size_tile_struc
  187.     loop @b
  188.   pop edi edx ecx ebx eax
  189.   ret
  190. endp
  191.  
  192. align 4
  193. proc tiles_grid_move_up, beg_tiles:dword, count:dword, rows:dword
  194.   push eax ebx ecx edx edi
  195.   xor eax,eax
  196.   xor ebx,ebx
  197.   mov edi,[beg_tiles]
  198.   mov ecx,[count]
  199.   mov edx,[rows]
  200.   @@:
  201.     cmp tile_delta_y,0
  202.     jne .no_jump
  203.       add tile_delta_y,dl ;¥á«¨ áâப  = 0, â® ¤®¡ ¢«ï¥¬ 'rows' çâ®-¡ë ­¥ ¢ë« §¨«  ¢­¨§
  204.     .no_jump:
  205.     dec tile_delta_y
  206.     add edi,size_tile_struc
  207.     loop @b
  208.   pop edi edx ecx ebx eax
  209.   ret
  210. endp
  211.  
  212. align 4
  213. proc tiles_grid_move_down, beg_tiles:dword, count:dword, rows:dword
  214.   push eax ebx ecx edx edi
  215.   xor eax,eax
  216.   xor ebx,ebx
  217.   mov edi,[beg_tiles]
  218.   mov ecx,[count]
  219.   mov edx,[rows]
  220.   @@:
  221.     inc tile_delta_y
  222.     cmp tile_delta_y,dl
  223.     jl .no_jump
  224.       mov tile_delta_y,0 ;¥á«¨ áâப  = 'rows', â® áâ ¢¨¬ ¥© 0 çâ®-¡ë ­¥ ¢ë« §¨«  ¢¢¥àå
  225.     .no_jump:
  226.     add edi,size_tile_struc
  227.     loop @b
  228.   pop edi edx ecx ebx eax
  229.   ret
  230. endp
  231.  
  232. align 4
  233. proc array_tile_function, beg_tiles:dword, count:dword, funct:dword
  234.   push ecx edi
  235.   mov edi,[beg_tiles]
  236.   mov ecx,[count]
  237.   @@:
  238.     stdcall [funct],edi
  239.     add edi,size_tile_struc
  240.     loop @b
  241.   pop edi ecx
  242.   ret
  243. endp
  244.  
  245. align 4
  246. draw_tiles:
  247. pushad
  248.   mov eax,47
  249.   mov ebx,0x20000
  250.   xor ecx,ecx
  251.   mov cl,byte[map.zoom]
  252.   mov edx,128*65536+13
  253.   mov esi,[sc.work_text]
  254.   or  esi,0x40000000
  255.   mov edi,[sc.work]
  256.   int 0x40
  257.  
  258.   stdcall array_tile_function, tile_00,max_tiles_count,draw_tile
  259. popad
  260.   ret
  261.  
  262. ; edi - pointer tile struct
  263. ;output:
  264. ; eax - 7
  265. ; edx - coordinates to tile draw
  266.  
  267. align 4
  268. proc tile_clear_area, height:dword
  269.   pushad
  270.     mov eax,13 ;draw rect
  271.  
  272.     mov cx,dx
  273.     shl ecx,16
  274.     mov cx,word[height]
  275.  
  276.     shr edx,16
  277.     mov bx,dx
  278.     shl ebx,16
  279.     mov bx,TILE_LEN_W
  280.  
  281.     mov edx,0xffffd0
  282.     int 0x40
  283.   popad
  284.   ret
  285. endp
  286.  
  287. ;???
  288. align 4
  289. proc draw_tile, tile:dword
  290.   pushad
  291.   mov edi,[tile]
  292.  
  293. ;*** set base point ***
  294.   mov edx,5*65536+35
  295.   xor eax,eax
  296.   mov al,tile_delta_y
  297.   shl ax,8 ;*256
  298.   add edx,eax
  299.   xor eax,eax
  300.   mov al,tile_delta_x
  301.   shl eax,8+16
  302.   add edx,eax
  303. ;*** set base point ***
  304.  
  305.   mov ebx,dword[procinfo.box.width] ;¯à®¢¥à塞 ¢« §¨â «¨ ª à⨭ª  ¯® ®á¨ x
  306.   sub ebx,min_window_w-5 ;5 - ®âáâ㯠᫥¢  ¤«ï 1-© ª à⨭ª¨
  307.   shl ebx,16
  308.   mov bx,dx ;­¨¦­ïï ª®®à¤¨­ â  ¯®ª  ­¥ ãç¨â뢠¥âáï, ¯®â®¬ã ¤¥« ¥¬ ¨å à ¢­ë¬¨
  309.   cmp edx,ebx
  310.   jg .end_f
  311.  
  312.   ;¯à®¢¥à塞 ¢« §¨â «¨ ª à⨭ª  ¯® ®á¨ y
  313.   mcall 48,4 ;eax = ¢ëá®â  ᪨­ 
  314.   mov ecx,dword[procinfo.box.height]
  315.   mov ebx,edx
  316.   and ebx,0xffff ;ebx = ª®®à¤¨­ â  'y' ¤«ï ¢ë¢®¤  â ©« 
  317.   add eax,ebx
  318.   add eax,5+5 ;5-à ¬ª 
  319.  
  320.   cmp ecx,eax
  321.   jle .end_f
  322.  
  323.   sub ecx,eax
  324.   cmp ecx,TILE_LEN_H
  325.   jle @f
  326.     mov ecx,TILE_LEN_H
  327.   @@:
  328.  
  329.   mov eax,7
  330.   bt tile_drobn,SCALE_0BIT_USE
  331.   jc .draw
  332.   bt tile_drobn,SCALE_1BIT_USE
  333.   jc .draw
  334.   jmp @f
  335.     .draw:
  336.     mov ebx,tile_rgb_icon
  337.     or ecx,TILE_LEN_W*65536 ;§ ¤ ­¨¥ è¨à¨­ë ¤«ï 楫®© ª à⨭ª¨
  338.     int 0x40 ;¢ë¢®¤ ­  íªà ­ 楫®© ¨«¨ 㢥«¨ç¨­®© ª à⨭ª¨
  339.     jmp .end_clear_tile
  340.   @@:
  341.     cmp tile_drobn,FRACT_TILE_ALL
  342.     je .end_clear_tile
  343.       stdcall tile_clear_area, ecx ;ç¨á⪠ ®¡« á⨠⠩« 
  344.   .end_clear_tile:
  345.  
  346.     cmp tile_drobn,0
  347.     je .info ;¥á«¨ ­¥â ­¨ ®¤­®© ¤à®¡­®© ª à⨭ª¨
  348.  
  349. mov si,cx ;si - ¢ëá®â  ­¨¦­¥© ¤à®¡­®© ª à⨭ª¨
  350. sub si,TILE_LEN_H/2 ;si - ¢ëá®â  ­¨¦­¥© ¤à®¡­®© ª à⨭ª¨
  351. cmp cx,TILE_LEN_H/2
  352. jl @f
  353.   mov cx,TILE_LEN_H/2 ;§ ¤ ­¨¥ ¢ëá®âë ¤«ï ¢¥àå­¥© ¤à®¡­®© ª à⨭ª¨
  354. @@:
  355.  
  356.     and ecx,0xffff ;áâ¨à ­¨¥ áâ à®© è¨à¨­ë
  357.     or ecx,(TILE_LEN_W/2)*65536 ;§ ¤ ­¨¥ è¨à¨­ë ¤«ï ¤à®¡­®© ª à⨭ª¨
  358.     mov ebx,tile_drobn_icon
  359.     bt tile_drobn,FRACT_TILE_BIT00
  360.     jae @f
  361.       int 0x40
  362.     @@:
  363.     add dx,TILE_LEN_H/2
  364.     add ebx,RGB_TILE_SIZE_1N4
  365.     bt tile_drobn,FRACT_TILE_BIT01
  366.     jae @f
  367.       xchg cx,si
  368.       int 0x40
  369.       xchg cx,si
  370.     @@:
  371.  
  372.     sub dx,TILE_LEN_H/2
  373.     ror edx,16
  374.     add dx,TILE_LEN_W/2
  375.     ror edx,16
  376.     add ebx,RGB_TILE_SIZE_1N4
  377.     bt tile_drobn,FRACT_TILE_BIT10
  378.     jae @f
  379.       int 0x40
  380.     @@:
  381.  
  382.     add dx,TILE_LEN_H/2
  383.     add ebx,RGB_TILE_SIZE_1N4
  384.     bt tile_drobn,FRACT_TILE_BIT11
  385.     jae @f
  386.       xchg cx,si
  387.       int 0x40
  388.     @@:
  389.  
  390.     jmp .end_f
  391.   .info: ;¢ë¢®¤ ¨­ä®à¬ æ¨¨, ¯à¨ ­¥ 㤠筮¬ ®âªàë⨨ ª à⨭®ª
  392.  
  393.   bt tile_drobn,SCALE_0BIT_USE
  394.   jc .end_f
  395.   bt tile_drobn,SCALE_1BIT_USE
  396.   jc .end_f
  397.  
  398.     mov ebx,edx
  399.     add ebx,0x30003
  400.     mov edx,tile_rgb_icon ;¯à¨ ­¥ã¤ ç­®¬ ®âªàë⨨ ¢ tile_rgb_icon ¯ãâì ª ä ©«ã
  401.     stdcall [str_len],tile_rgb_icon,RGB_TILE_SIZE_1N4
  402.     mov edi,eax
  403.  
  404.     mov eax,4 ;draw text
  405.     mov ecx,0xff
  406. ;or ecx,0x80000000
  407.     mov esi,TILE_TEXT_MAX_LEN
  408.  
  409.     @@:
  410.       cmp edi,TILE_TEXT_MAX_LEN
  411.       jg .no_line_last
  412.         mov esi,edi
  413.         int 0x40
  414.         jmp .end_f
  415.       .no_line_last:
  416.       int 0x40
  417.       add edx,esi
  418.       sub edi,esi
  419.       add ebx,10 ;®¯ã᪠¥¬áï ­  ­¨¦­îî áâபã
  420.       jmp @b
  421.   .end_f:
  422.   popad
  423.   ret
  424. endp
  425.  
  426. ;㢥«¨ç¥­¨¥ ¬ áèâ ¡ 
  427. align 4
  428. but_ZoomP:
  429.   cmp byte[map.zoom],24
  430.   jge @f
  431.     inc byte[map.zoom]
  432.     shl dword[map.coord_x],1
  433.     shl dword[map.coord_y],1
  434.     call but_Refresh
  435.   @@:
  436.   ret
  437.  
  438. ;㬥­ì襭¨¥ ¬ áèâ ¡ 
  439. align 4
  440. but_ZoomM:
  441.   cmp byte[map.zoom],1
  442.   jle @f
  443.     dec byte[map.zoom]
  444.     shr dword[map.coord_x],1
  445.     shr dword[map.coord_y],1
  446.     call but_Refresh
  447.   @@:
  448.   ret
  449.  
  450. ;???
  451. align 4
  452. but_MetSave: ;á®åà ­¥­¨¥ ä ©«  á ¬¥âª ¬¨
  453.   stdcall dword[tl_save_mem], TREE_ICON_SYS16_BMP_SIZE,[bmp_icon],0,tree2
  454.  
  455.   push eax ebx ecx edi
  456.     copy_path fn_metki,sys_path,file_name,0x0
  457.  
  458.     stdcall dword[tl_get_mem_size], [bmp_icon],tree2
  459.     pop ecx
  460.     inc ecx ;¤«ï § ¯¨á¨ ¢ ä ©« § ¢¥àè î饣® ­ã«ï
  461.  
  462.     mov eax,70
  463.     m2m [run_file_70.param4], [bmp_icon]
  464.     mov [run_file_70.func_n], 2
  465.     mov [run_file_70.param1], 0
  466.     mov [run_file_70.param2], 0
  467.     mov [run_file_70.param3], ecx
  468.     mov [run_file_70.rezerv], 0
  469.     mov [run_file_70.name], file_name
  470.     mov ebx,run_file_70
  471.     int 0x40
  472.   pop edi ecx ebx eax
  473.   jmp still
  474.  
  475. ;???
  476. align 4
  477. but_MetLoad: ;áç¨â뢠¥¬ ä ©« á ¬¥âª ¬¨
  478.   cmp byte[met_fr_opn],0
  479.   jne .end_f
  480.   pushad
  481.     mov byte[met_fr_opn],1
  482.     copy_path fn_metki,sys_path,file_name,0x0
  483.     mov eax,70 ;load icon file
  484.     mov [run_file_70.func_n], 0
  485.     mov [run_file_70.param1], 0
  486.     mov [run_file_70.param2], 0
  487.     mov [run_file_70.param3], TREE_ICON_SYS16_BMP_SIZE
  488.     mov [run_file_70.rezerv], 0
  489.     mov [run_file_70.name], file_name
  490.     m2m [run_file_70.param4], [bmp_icon]
  491.     mov eax,70
  492.     mov ebx,run_file_70
  493.     int 0x40
  494.     cmp ebx,0xffffffff
  495.     je @f
  496.       stdcall [tl_load_mem], TREE_ICON_SYS16_BMP_SIZE,dword[bmp_icon],0,tree2
  497.       stdcall [tl_cur_beg], tree2 ;?
  498.       stdcall [tl_draw], tree2 ;?
  499.       pop eax
  500.     @@:
  501.     mov byte[file_name],0 ;clear file name
  502.   popad
  503.   .end_f:
  504.   ret
  505.  
  506. ;???
  507. align 4
  508. but_MetAdd: ;¤®¡ ¢«¥­¨¥ ¬¥âª¨
  509.   push eax
  510.     mov eax,dword[bmp_icon]
  511.     m2m dword[eax],  dword[map.coord_x]
  512.     m2m dword[eax+4],dword[map.coord_y]
  513.     m2m  word[eax+8], word[map.zoom]
  514.     add eax,12
  515.     stdcall dword[str_copy], eax,30,dword[edit2.text],30
  516.     stdcall dword[tl_node_add], dword[bmp_icon], 0, tree2
  517.     stdcall dword[tl_draw], tree2
  518.   pop eax
  519.   jmp still
  520.  
  521. ;???
  522. align 4
  523. fun_goto_met: ;¯¥à¥å®¤ ª ¢ë¡à ­­®© ¬¥âª¥
  524.   push eax
  525.   stdcall dword[tl_node_get_data], tree2
  526.   pop eax
  527.   cmp eax,0
  528.   je @f ;ªãàá®à ­¥ á⮨⠭  ¬¥âª¥
  529.     m2m dword[map.coord_x],dword[eax]
  530.     m2m dword[map.coord_y],dword[eax+4]
  531.     m2m word[map.zoom],word[eax+8]
  532.     call but_Refresh
  533.   @@:
  534.   pop eax
  535.   ret
  536.  
  537. ;???
  538. align 4
  539. but_Refresh:
  540.   call fun_new_map_type ;¯à®¢¥à塞 ­¥ ¯®¬¥­ï«áï «¨ ⨯ ¯à®á¬ âਢ ¥¬ëå ä ©«®¢
  541.  
  542.   stdcall array_tile_function, tile_00,max_tiles_count,load_tile
  543.   stdcall draw_tiles
  544.   ret
  545.  
  546. align 4
  547. proc tile_init, tile:dword
  548.   push eax edi
  549.     mov edi,[tile]
  550.  
  551.     push dword RGB_TILE_SIZE+300
  552.     call mem.Alloc
  553.     mov tile_rgb_icon,eax
  554.  
  555.     push dword RGB_TILE_SIZE
  556.     call mem.Alloc
  557.     mov tile_drobn_icon,eax
  558.   pop edi eax
  559.   ret
  560. endp
  561.  
  562. align 4
  563. proc tile_destroy, tile:dword
  564.   push edi
  565.     mov edi,[tile]
  566.     push tile_rgb_icon
  567.     call mem.Free
  568.     push tile_drobn_icon
  569.     call mem.Free
  570.   pop edi
  571.   ret
  572. endp
  573.  
  574.  
  575. ;???
  576. align 4 ;§ £à㦠¥â â ©«ë, ¢ ®¯à¥¤¥«¥­­®© ®¡« áâ¨
  577. proc load_tile, tile:dword
  578.   push eax ebx ecx edi
  579.   mov edi,dword[tile] ;ª®¯¨à㥬 㪠§ â¥«ì ­  áâàãªâãàã â ©« , çâ®-¡ë à ¡®â «¨ ª®­áâ ­âë
  580.  
  581.   stdcall mem_copy, map,edi, 9 ;ª®¯¨à㥬 ª®®à¤¨­ âë ªãàá®à  ¢ áâàãªâãàã â ©« 
  582.   xor eax,eax
  583.   mov al,tile_delta_x
  584.   add tile_coord_x,eax ;ᤢ¨£ ¥¬ ª®®à¤¨­ âë â ©« , ®â­®á¨â¥«ì­® ªãàá®à 
  585.   mov al,tile_delta_y
  586.   add tile_coord_y,eax
  587.   stdcall get_tile_path,edi    ;¡¥à¥¬ ¯ãâì ª â ©«ã
  588.  
  589. ;***
  590.   ; ¯à®¢¥àª  ª®®à¤¨­ â ¯®á«¥¤­¥© § £à㦥­­®© ª à⨭ª¨
  591.   mov eax,edi
  592.   mov ecx,9
  593.   @@:
  594.     mov bl,byte[eax+tile_offs_l_load]
  595.     cmp byte[eax],bl
  596.     jne .st_load
  597.     inc eax
  598.     loop @b
  599.   mov ebx,dword[edit1.size];¯à®¢¥à塞 â ª¦¥ ⨯ ª àâ, ª®â®àë© ¡ë« à ­¥¥ § £à㦥­
  600.   cmp tile_key_path_len,bl ;¯à¨ ¨§¬¥­¥­¨¨ ⨯  ª àâë ­ã¦­® â ª¦¥ ¯¥à¥ç¨â뢠âì ä ©«ë
  601.   jne .st_load
  602.  
  603.   jmp @f    ;¥á«¨ ª®®à¤¨­ âë ᮢ¯ «¨ ⮠㦥 ­¥ § £à㦠¥¬
  604.   .st_load: ;start load tile
  605.  
  606.   ; ãáâ ­®¢ª  ­®¢ëå ª®®à¤¨­ â ¤«ï ¯®á«¥¤­¥© § £à㦥­­®© ª à⨭ª¨
  607.   mov eax,edi
  608.   add eax,tile_offs_l_load
  609.   stdcall mem_copy, edi,eax,9
  610.   mov ebx,dword[edit1.size]
  611.   mov tile_key_path_len,bl
  612. ;***
  613.  
  614.   ;mov tile_drobn,0
  615.   mov tile_drobn,SCALE_0_USE ;áâ ¢¨¬ ä« £ ®âªàëâ¨ï ª à⨭ª¨ ⥪ã饣® ã஢­ï
  616.   stdcall load_new_tile,edi
  617.   cmp tile_err_f,5
  618.   jne @f
  619.     mov tile_drobn,0
  620.     mov eax,ch2 ;¯à®¢¥à塞 ®¯æ¨î '¡à âì á­¨§ã'
  621.     bt dword[eax+32],1 ;ch_flags equ [edi+32] ;ä« £¨
  622.     jae .opt_drobn_false
  623.  
  624.     ;¥á«¨ ä ©« ­¥ ­ ©¤¥­, ¯®¯ ¤ ¥¬ á
  625.     inc tile_zoom
  626.     shl tile_coord_y,1
  627.     shl tile_coord_x,1
  628.     stdcall get_tile_path,edi
  629.     stdcall load_new_tile,edi
  630.  
  631.     cmp tile_err_f,5
  632.     je .no_tile_00
  633.       or tile_drobn,FRACT_TILE_00
  634. ; 1 ᦠ⨥ ª à⨭ª¨ ¯® ¢ëá®â¥
  635.       stdcall img_rgb_hdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN, TILE_LEN
  636. ; 2 ᦠ⨥ ª à⨭ª¨ ¯® è¨à¨­¥
  637.       stdcall img_rgb_wdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN/2
  638. ; 3 ª®¯¨à®¢ ­¨¥ 1-© ª à⨭ª¨ ¢ १¥à¢­ë© ¡ãä¥à
  639.       stdcall mem_copy, tile_rgb_icon, tile_drobn_icon, RGB_TILE_SIZE_1N4
  640.     .no_tile_00:
  641.  
  642.     ;¥á«¨ ä ©« ­¥ ­ ©¤¥­, ¯®¯ ¤ ¥¬ á
  643.     inc tile_coord_y
  644.     stdcall get_tile_path,edi
  645.     stdcall load_new_tile,edi
  646.  
  647.     cmp tile_err_f,5
  648.     je .no_tile_01
  649. ;      mov byte[map.drobn],0
  650.       or tile_drobn,FRACT_TILE_01
  651. ; 1 ᦠ⨥ ª à⨭ª¨ ¯® ¢ëá®â¥
  652.       stdcall img_rgb_hdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN, TILE_LEN
  653. ; 2 ᦠ⨥ ª à⨭ª¨ ¯® è¨à¨­¥
  654.       stdcall img_rgb_wdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN/2
  655. ; 3 ª®¯¨à®¢ ­¨¥ 2-© ª à⨭ª¨ ¢ १¥à¢­ë© ¡ãä¥à
  656.       mov eax,tile_drobn_icon
  657.       add eax,RGB_TILE_SIZE_1N4 ; ᤢ¨£ ª à⨭ª¨ ¢­¨§ (â. ª. ®­  ­¨¦­ïï)
  658.       stdcall mem_copy, tile_rgb_icon, eax, RGB_TILE_SIZE_1N4
  659.     .no_tile_01:
  660.  
  661.     ;¥á«¨ ä ©« ­¥ ­ ©¤¥­, ¯®¯ ¤ ¥¬ á
  662.     dec tile_coord_y
  663.     inc tile_coord_x
  664.     stdcall get_tile_path,edi
  665.     stdcall load_new_tile,edi
  666.  
  667.     cmp tile_err_f,5
  668.     je .no_tile_10
  669. ;      mov byte[map.drobn],0
  670.       or tile_drobn,FRACT_TILE_10
  671. ; 1 ᦠ⨥ ª à⨭ª¨ ¯® ¢ëá®â¥
  672.       stdcall img_rgb_hdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN, TILE_LEN
  673. ; 2 ᦠ⨥ ª à⨭ª¨ ¯® è¨à¨­¥
  674.       stdcall img_rgb_wdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN/2
  675. ; 3 ª®¯¨à®¢ ­¨¥ 3-© ª à⨭ª¨ ¢ १¥à¢­ë© ¡ãä¥à
  676.       mov eax,tile_drobn_icon
  677.       add eax,RGB_TILE_SIZE_1N2 ; ᤢ¨£ ª à⨭ª¨ ¢­¨§ (â. ª. ®­  ­¨¦­ïï)
  678.       stdcall mem_copy, tile_rgb_icon, eax, RGB_TILE_SIZE_1N4
  679.     .no_tile_10:
  680.  
  681.     ;¥á«¨ ä ©« ­¥ ­ ©¤¥­, ¯®¯ ¤ ¥¬ á
  682.     inc tile_coord_y
  683.     stdcall get_tile_path,edi
  684.     stdcall load_new_tile,edi
  685.  
  686.     cmp tile_err_f,5
  687.     je .no_tile_11
  688. ;      mov byte[map.drobn],0
  689.       or tile_drobn,FRACT_TILE_11
  690. ; 1 ᦠ⨥ ª à⨭ª¨ ¯® ¢ëá®â¥
  691.       stdcall img_rgb_hdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN, TILE_LEN
  692. ; 2 ᦠ⨥ ª à⨭ª¨ ¯® è¨à¨­¥
  693.       stdcall img_rgb_wdiv2, tile_rgb_icon, TILE_LEN*TILE_LEN/2
  694. ; 3 ᤢ¨£ ª à⨭ª¨ ¢­¨§ ¡¥§ ª®¯¨à®¢ ­¨ï (â. ª. ®­  ­¨¦­ïï)
  695.       stdcall img_rgb_hoffs, tile_rgb_icon, TILE_LEN*TILE_LEN/4, TILE_LEN/2, TILE_LEN*3/2
  696.  
  697.       ;ª®¯¨à㥬 ¯®á«¥¤­îî ¤à®¡­ãî ª à⨭ªã ¢ ¡ãä¥à drobn_icon
  698.       ;¢ ª®â®à®¬ 㦥 ¡ë«¨ áä®à¬¨à®¢ ­ë 3 ¤à㣨¥
  699.       mov eax,tile_drobn_icon
  700.       add eax,RGB_TILE_SIZE_1N4*3
  701.       stdcall mem_copy, tile_rgb_icon, eax, RGB_TILE_SIZE_1N4
  702.     .no_tile_11:
  703.   .opt_drobn_false:
  704.  
  705.  
  706.   mov eax,ch1 ;¯à®¢¥à塞 ®¯æ¨î '¡à âì ᢥàåã'
  707.   bt dword[eax+32],1 ;ch_flags equ [edi+32] ;ä« £¨
  708.   jae @f
  709.   cmp tile_drobn,FRACT_TILE_ALL ;¥á«¨ ᮡ࠭  ¢áï ª à⨭ª , ⮠ᢥàåã 㦥 ­¥ ¡¥à¥¬
  710.   je @f
  711.     ;­¥ §­ ¥¬ ¡ë« -«¨ ¢ª«î祭  ®¯æ¨ï '¡à âì á­¨§ã', ¤«ï ª®â®à®© ¨§¬¥­ï«¨áì ª®®à¤¨­ âë
  712.     ;¯®â®¬ã ®¯ïâì ª®¯¨à㥬 ª®®à¤¨­ âë ªãàá®à  ¢ áâàãªâãàã â ©« 
  713.     stdcall mem_copy, map,edi, 9
  714.     xor eax,eax
  715.     mov al,tile_delta_x
  716.     add tile_coord_x,eax ;ᤢ¨£ ¥¬ ª®®à¤¨­ âë â ©« , ®â­®á¨â¥«ì­® ªãàá®à 
  717.     mov al,tile_delta_y
  718.     add tile_coord_y,eax
  719.  
  720.     xor ecx,ecx
  721.     .zoom:
  722.       cmp tile_zoom,0
  723.       je @f ;¯à®á¬ âਢ ¥âáï á ¬ ï ¢¥àå­ïï ª à⨭ª , ¢ë室¨¬
  724.       call get_parent_tiles ;横«¨ç¥áª¨© ¯à®á¬®âà த¨â¥«ì᪨å â ©«®¢
  725.       bt tile_drobn,SCALE_1BIT_USE
  726.       jc @f
  727.       cmp ecx,5 ;5 - ®£à ­¨ç¥­¨¥ ­  á⥯¥­ì à áâ¢ ­¨ï ª à⨭ª¨
  728.       je @f
  729.       jmp .zoom
  730.     @@:
  731.  
  732.   pop edi ecx ebx eax
  733.   ret
  734. endp
  735.  
  736. ;output:
  737. ;ecx - if not file = count parent levels else = 0
  738. align 4
  739. proc get_parent_tiles
  740.   dec tile_zoom
  741.   shr tile_coord_y,1
  742.   shr tile_coord_x,1
  743.   inc ecx
  744.  
  745.   stdcall get_tile_path,edi ;¡¥à¥¬ ¯ãâì ª â ©«ã
  746.   stdcall load_new_tile,edi
  747.   cmp tile_err_f,5
  748.   je @f
  749.     or tile_drobn,SCALE_1_USE
  750.     mov ebx,ecx
  751.   .zoom_cycle:
  752.     xor eax,eax
  753.     dec ebx
  754.     bt tile_key_coord_y,ebx
  755.     jae .scale_bot_l
  756.       add eax,RGB_TILE_SIZE_1N2
  757.     .scale_bot_l:
  758.     bt tile_key_coord_x,ebx
  759.     jae .scale_rig_l
  760.       add eax,TILE_LEN_W*3/2
  761.     .scale_rig_l:
  762.     cmp eax,0
  763.     je .scale_top_left
  764.       add eax,tile_rgb_icon
  765.       stdcall mem_copy, eax, tile_rgb_icon, RGB_TILE_SIZE_1N2
  766.     .scale_top_left:
  767.  
  768.     ;à áâ¢ ­¨¥ ¢¥àå­¥© ª à⨭ª¨
  769.     stdcall img_rgb_wcrop, tile_rgb_icon,TILE_LEN_W,TILE_LEN_W/2,TILE_LEN_H ;®â१ ¥¬ «¨è­¥¥
  770.     stdcall img_rgb_wmul2, tile_rgb_icon,RGB_TILE_SIZE_1N4/3 ;à á⨣¨¢ ¥¬ ¯® è¨à¨­¥
  771.     stdcall img_rgb_hmul2, tile_rgb_icon,RGB_TILE_SIZE_1N2/3,TILE_LEN_W ;à áâ¢ ¥¬ ¯® ¢ëá®â¥
  772.   loop .zoom_cycle
  773.   @@:
  774.   ret
  775. endp
  776.  
  777. ;tile - 㪠§ â¥«ì ­  áâàãªâãàã â ©« 
  778. align 4 ;§ £à㦠¥â ®¯à¥¤¥«¥­­ë© â ©«
  779. proc load_new_tile, tile:dword
  780.   pushad
  781.  
  782.   mov eax,70 ;load icon file
  783.   mov [run_file_70.func_n], 0
  784.   mov [run_file_70.param1], 0
  785.   mov [run_file_70.param2], 0
  786.   mov [run_file_70.param3], RGB_TILE_SIZE+300 ;+54
  787.   m2m [run_file_70.param4], [bmp_icon]
  788.   mov [run_file_70.rezerv], 0
  789.   mov [run_file_70.name], file_name
  790.   mov ebx,run_file_70
  791.   int 0x40
  792.   mov edi,[tile]
  793.   mov tile_err_f,al
  794.   cmp ebx,0xffffffff
  795.   je .no_load
  796.  
  797.   stdcall dword[img_decode], dword[bmp_icon],ebx,0
  798.   mov dword[data_icon],eax
  799.   stdcall dword[img_to_rgb2], dword[data_icon],tile_rgb_icon
  800.   stdcall dword[img_destroy], dword[data_icon]
  801.     jmp @f
  802.   .no_load:
  803.  
  804. ;  mov edi,[tile]
  805.   mov al,byte[map.zoom]
  806.   cmp tile_zoom,al
  807.   jne @f
  808.     stdcall mem_copy, file_name,tile_rgb_icon,150
  809.   @@:
  810.   popad
  811.   ret
  812. endp
  813.  
  814. ;äã­ªæ¨ï £¥­¥à¨àã¥â ç áâì ¯ã⨠ª ä ©«ã ¢ ¢¨¤¥: \z?\?\x?\?\y?
  815. align 4
  816. proc get_tile_path, tile:dword
  817.   push eax ecx edi esi
  818.     mov ecx,300
  819.     mov edi,txt_tile_path
  820.     @@:
  821.       mov byte[edi],0 ;ç¨á⨬ áâபã
  822.       inc edi
  823.       loop @b
  824.  
  825.     mov esi,dword[tile] ;¡¥à¥¬ 㪠§ â¥«ì
  826.  
  827.     mov ecx,0x80000000 ;rol 0x80000000,1 = 1
  828.     xor eax,eax
  829.     mov al,byte[esi+8] ;+8 = zoom
  830.     .calc_coord:
  831.       rol ecx,1 ;ecx = maximum coord
  832.       dec ax
  833.       cmp ax,0
  834.       jg .calc_coord
  835.  
  836.     mov byte[txt_tile_path],'z'
  837.     mov edi,txt_tile_path
  838.     inc edi
  839.     xor eax,eax
  840.     mov al,byte[esi+8] ;+8 = zoom
  841.     call tl_convert_to_str
  842.  
  843.     inc edi
  844.     cmp byte[esi+8],9 ;+8 = zoom
  845.     jle @f
  846.       inc edi
  847.     @@:
  848.     mov byte[edi],'/'
  849.     inc edi
  850.  
  851.     mov eax,[esi] ;coord_x
  852. cmp eax,ecx
  853. jge .out_of_rang ;coord_x ¡®«ìè¥ ¤®¯ãá⨬®£® §­ ç¥­¨ï ¯à¨ § ¤ ­­®¬ ¬ áèâ ¡¥
  854.     shr eax,10
  855.     call tl_convert_to_str
  856.  
  857.     @@:
  858.       inc edi
  859.       cmp byte[edi],'0'
  860.       jge @b
  861.     mov byte[edi],'/'
  862.     inc edi
  863.     mov byte[edi],'x'
  864.     inc edi
  865.  
  866.     mov eax,[esi] ;coord_x
  867.     call tl_convert_to_str
  868.  
  869.     @@:
  870.       inc edi
  871.       cmp byte[edi],'0'
  872.       jl @f
  873.       cmp byte[edi],'9'
  874.       jg @f
  875.       jmp @b
  876.     @@:
  877.  
  878.     ;coord y
  879.     mov byte[edi],'/'
  880.     inc edi
  881.  
  882.     mov eax,[esi+4] ;coord_y
  883. cmp eax,ecx
  884. jge .out_of_rang ;coord_y ¡®«ìè¥ ¤®¯ãá⨬®£® §­ ç¥­¨ï ¯à¨ § ¤ ­­®¬ ¬ áèâ ¡¥
  885.     shr eax,10
  886.     call tl_convert_to_str
  887.  
  888.     @@:
  889.       inc edi
  890.       cmp byte[edi],'0'
  891.       jge @b
  892.     mov byte[edi],'/'
  893.     inc edi
  894.     mov byte[edi],'y'
  895.     inc edi
  896.  
  897.     mov eax,[esi+4] ;coord_y]
  898.     call tl_convert_to_str
  899.  
  900. .out_of_rang:
  901.     call get_all_path
  902.   pop esi edi ecx eax
  903.   ret
  904. endp
  905.  
  906. align 4
  907. get_all_path: ;äã­ªæ¨ï ¤«ï ᮡ¨à ­¨ï ¯®«­®£® ¯ã⨠¨§ ¢á¥å ªã᪮¢
  908.   mov ecx,dword[edit1.text]
  909.   add ecx,dword[edit1.size]
  910.   dec ecx
  911.  
  912.   stdcall [str_copy], file_name,4096-1, dword[edit1.text],dword[edit1.max]
  913.  
  914.   cmp byte[ecx],'/'
  915.   je @f
  916.     stdcall [str_catchar],file_name,4096-1, dword '/'
  917.   @@:
  918.  
  919.   stdcall [str_cat], file_name,4096-1, txt_tile_path,300
  920.   stdcall [str_cat], file_name,4096-1, dword [txt_tile_type],10
  921. ret