Subversion Repositories Kolibri OS

Rev

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

  1. use32
  2.         org 0x0
  3.         db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
  4.         dd 0x1
  5.         dd start
  6.         dd i_end ;à §¬¥à ¯à¨«®¦¥­¨ï
  7.         dd mem
  8.         dd stacktop
  9.         dd 0
  10.         dd sys_path
  11.  
  12. include '../../macros.inc'
  13. include '../../proc32.inc'
  14. include '../../develop/libraries/box_lib/load_lib.mac'
  15. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  16. include '../../dll.inc'
  17. include 'lang.inc'
  18. include 'info_fun_float.inc'
  19.  
  20. debug equ 0
  21.  
  22. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  23.  
  24. struct FileInfoBlock
  25.         Function dd ?
  26.         Position dd ?
  27.         Flags    dd ?
  28.         Count    dd ?
  29.         Buffer   dd ?
  30.                 db ?
  31.         FileName dd ?
  32. ends
  33.  
  34. run_file_70 FileInfoBlock
  35. image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì, ­ã¦¥­ ¤«ï ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
  36. open_file_lif dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ä ©«®¢ 3ds
  37. open_file_size dd 0 ;à §¬¥à ®âªàë⮣® ä ©« 
  38.  
  39. ;
  40. fn_toolbar db 'toolbar.png',0
  41. IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
  42. IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*7
  43. image_data_toolbar dd 0
  44. ;
  45. TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;à §¬¥à bmp ä ©«  á á¨á⥬­ë¬¨ ¨ª®­ª ¬¨
  46. icon_tl_sys dd 0 ;㪠§ â¥¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï á¨á⥬­ëå ¨ª®­®ª
  47. icon_toolbar dd 0 ;㪠§ â¥¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï ¨ª®­®ª ®¡ê¥ªâ®¢
  48. TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*8+54 ;à §¬¥à bmp ä ©«  á ¨ª®­ª ¬¨ ®¡ê¥ªâ®¢
  49. ;
  50. IMAGE_FILE1_SIZE equ 128*144*3+54 ;à §¬¥à ä ©«  á ¨§®¡à ¦¥­¨¥¬
  51.  
  52. macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
  53.         ;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
  54.         if path eqtype '' ;¯à®¢¥à塞 § ¤ ­ «¨ áâப®© ¯ à ¬¥âà path
  55.                 jmp @f
  56.                         local .path_str
  57.                         .path_str db path ;ä®à¬¨à㥬 «®ª «ì­ãî ¯¥à¥¬¥­­ãî
  58.                         db 0
  59.                 @@:
  60.                 ;32 - áâ ­¤ àâ­ë©  ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥­ ¡ëâì ¡ãä¥à á á¨á⥬­ë¬ ¯ã⥬
  61.                 copy_path .path_str,[32],file_name,0
  62.         else
  63.                 copy_path path,[32],file_name,0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
  64.         end if
  65.  
  66.         stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
  67.         mov [buf],eax
  68.  
  69.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  70.         mov [run_file_70.Function], 0
  71.         mov [run_file_70.Position], 0
  72.         mov [run_file_70.Flags], 0
  73.         mov [run_file_70.Count], dword size
  74.         m2m [run_file_70.Buffer], [buf]
  75.         mov byte[run_file_70+20], 0
  76.         mov [run_file_70.FileName], file_name
  77.         mov ebx,run_file_70
  78.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  79.         cmp ebx,0xffffffff
  80.         je @f
  81.                 ;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
  82.                 stdcall dword[img_decode], dword[buf],ebx,0
  83.                 mov dword[image_data],eax
  84.                 ;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
  85.                 stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
  86.                 ;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à image_data
  87.                 stdcall dword[img_destroy], dword[image_data]
  88.         @@:
  89. }
  90.  
  91. ;--------------------------------------
  92. include 'data.inc'
  93.  
  94. level_stack dd 0
  95. offs_last_timer dd 0 ;¯®á«¥¤­¨© ᤢ¨£ ¯®ª § ­ë© ¢ ä㭪樨 â ©¬¥à 
  96.  
  97. ID_ICON_CHUNK_MAIN equ 0 ;¨ª®­ª  £« ¢­®£® ¡«®ª 
  98. ID_ICON_CHUNK_NOT_FOUND equ 1 ;¨ª®­ª  ­¥ ¨§¢¥áâ­®£® ¡«®ª 
  99. ID_ICON_DATA equ 2 ;¨ª®­ª  ¤«ï ¤ ­­ëå ¡«®ª , ­¥ ®¯à¥¤¥«¥­­®© áâàãªâãàë
  100.  
  101. FILE_ERROR_CHUNK_SIZE equ -3 ;®è¨¡ª  ¢ à §¬¥à¥ ¡«®ª 
  102.  
  103. align 4
  104. file_3ds: ;¯¥à¥¬¥­­ë¥ ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ®âªàë⨨ ä ©« 
  105. .offs: dd 0 ;+0 㪠§ â¥«ì ­  ­ ç «® ¡«®ª 
  106. .size: dd 0 ;+4 à §¬¥à ¡«®ª  (¤«ï 1-£® ¯ à ¬¥âà  = à §¬¥à ä ©«  3ds)
  107. rb 8*MAX_FILE_LEVEL
  108.  
  109. size_one_list equ 42
  110. list_offs_chunk_del equ 8 ;¬®¦¥â «¨ ¡«®ª 㤠«ïâáï
  111. list_offs_chunk_lev equ 9 ;ã஢¥­ì ¡«®ª  (¯à®¯¨á ­ ¢ ¤ ­­ë¥ 㧫 )
  112. list_offs_p_data equ 10 ;㪠§ â¥«ì ­  ¯®¤¯¨áì ¡«®ª 
  113. list_offs_text equ 14 ;ᤢ¨£ ­ ç «  ⥪áâ  ¢ «¨áâ¥
  114. buffer rb size_one_list ;¡ãä¥à ¤«ï ¤®¡ ¢«¥­¨ï áâàãªâãà ¢ ᯨ᮪ tree1
  115.  
  116. txt_3ds_symb db 0,0
  117. ;--------------------------------------
  118.  
  119. include 'info_wnd_coords.inc'
  120.  
  121. align 4
  122. start:
  123.         load_libraries l_libs_start,l_libs_end
  124.         ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨«¨áì ¡¨¡«¨®â¥ª¨
  125.         mov ebp,lib_0
  126.         cmp dword [ebp+ll_struc_size-4],0
  127.         jz @f
  128.         mov ebp,lib_1
  129.         cmp dword [ebp+ll_struc_size-4],0
  130.         jz @f
  131.         mov ebp,lib_2
  132.         cmp dword [ebp+ll_struc_size-4],0
  133.         jz @f
  134.         mov ebp,lib_3
  135.         cmp dword [ebp+ll_struc_size-4],0
  136.         jz @f
  137.                 mcall -1 ;exit not correct
  138.         @@:
  139.         mcall 48,3,sc,sizeof.system_colors
  140.         mcall 40,0x27
  141.         stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª  ¤¨ «®£ 
  142.  
  143.         stdcall dword[tl_data_init], tree1
  144.         ;á¨á⥬­ë¥ ¨ª®­ª¨ 16*16 ¤«ï tree_list
  145.         load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE
  146.         ;¥á«¨ ¨§®¡à ¦¥­¨¥ ­¥ ®âªàë«®áì, â® ¢ icon_tl_sys ¡ã¤ãâ
  147.         ;­¥ ¨­¨æ¨ «¨§¨à®¢ ­­ë¥ ¤ ­­ë¥, ­® ®è¨¡ª¨ ­¥ ¡ã¤¥â, â. ª. ¡ãä¥à ­ã¦­®£® à §¬¥à 
  148.         mov eax,dword[icon_tl_sys]
  149.         mov dword[tree1.data_img_sys],eax
  150.  
  151.         load_image_file 'objects.png', icon_toolbar,TOOLBAR_ICON_BMP_SIZE
  152.         mov eax,dword[icon_toolbar]
  153.         mov dword[tree1.data_img],eax
  154.  
  155.         stdcall [buf2d_create], buf_0 ;ᮧ¤ ­¨¥ ¡ãä¥à 
  156.  
  157.         load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE
  158.         stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;ᮧ¤ ¥¬ ¡ãä¥à
  159.         stdcall mem.Free,[image_data_toolbar] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
  160.         stdcall [buf2d_conv_24_to_8], buf_1,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8 ¡¨â
  161.         stdcall [buf2d_convert_text_matrix], buf_1
  162.  
  163.         load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE
  164.  
  165.         stdcall mem.Alloc,MAX_FILE_SIZE
  166.         mov dword[open_file_lif],eax
  167.  
  168.         mcall 26,9
  169.         mov [last_time],eax
  170.  
  171. align 4
  172. red_win:
  173.         call draw_window
  174.  
  175. align 4
  176. still:
  177.         mcall 26,9
  178.         mov ebx,[last_time]
  179.         add ebx,10 ;§ ¤¥à¦ª 
  180.         cmp ebx,eax
  181.         jge @f
  182.                 mov ebx,eax
  183.         @@:
  184.         sub ebx,eax
  185.         ;cmp ebx,10 ;§ ¤¥à¦ª 
  186.         ;ja timer_funct
  187.         ;test ebx,ebx
  188.         ;jz timer_funct
  189.         mcall 23
  190.         cmp eax,0
  191.         je timer_funct
  192.  
  193.         cmp al,1
  194.         jz red_win
  195.         cmp al,2
  196.         jz key
  197.         cmp al,3
  198.         jz button
  199.         cmp al,6
  200.         jne @f
  201.                 mcall 9,procinfo,-1
  202.                 cmp ax,word[procinfo+4]
  203.                 jne @f ;®ª­® ­¥  ªâ¨¢­®
  204.                 call mouse
  205.         @@:
  206.         jmp still
  207.  
  208. align 4
  209. mouse:
  210.         stdcall [tl_mouse], dword tree1
  211.         ret
  212.  
  213. align 4
  214. timer_funct:
  215.         pushad
  216. if debug
  217.         mcall 4, (5 shl 16)+8, 0xff+0x80000000, txt_0002
  218. end if
  219.         mcall 26,9
  220.         mov [last_time],eax
  221.  
  222.         ;
  223.         stdcall [tl_node_get_data],tree1
  224.         pop ebx
  225.         cmp ebx,0
  226.         je @f
  227.                 mov eax,dword[ebx] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
  228.                 mov ecx,dword[ebx+4] ;à §¬¥à ¡«®ª 
  229.                 stdcall hex_in_str, txt_3ds_offs.dig, eax,8
  230.                 stdcall hex_in_str, txt_3ds_offs.siz, ecx,8
  231.  
  232.                 add eax,dword[open_file_lif] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
  233.                 cmp dword[offs_last_timer],eax
  234.                 je @f
  235.                         mov dword[offs_last_timer],eax
  236.                         call buf_draw_beg
  237.                         stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000
  238.                         mov edx,dword[ebx+list_offs_p_data]
  239.                         cmp edx,0 ;ᬮâਬ ¥áâì «¨ ®¯¨á ­¨¥ ¡«®ª 
  240.                         je .no_info
  241.                                 stdcall [buf2d_draw_text], buf_0, buf_1,edx,5,45,0xb000
  242.                         .no_info:
  243.                         add ecx,eax ;¯®«ãç ¥¬ à §¬¥à ¡«®ª 
  244.                         stdcall buf_draw_hex_table,eax,ecx ;¤®¡ ¢«¥­¨¥ 16-à¨ç­ëå ¤ ­­ëå
  245.                         stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
  246.         @@:
  247.         popad
  248.         jmp still
  249.  
  250. align 4
  251. buf_draw_beg:
  252.         stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
  253.         stdcall [buf2d_draw_text], buf_0, buf_1,txt_open_3ds,5,5,0xff
  254.         stdcall [buf2d_draw_text], buf_0, buf_1,openfile_path,5,15,0xff
  255.         cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
  256.         jne @f
  257.                 stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_err_sizes,5,25,0xff0000
  258.         @@:
  259.         ret
  260.  
  261. align 4
  262. proc buf_draw_hex_table, offs:dword, size_line:dword
  263.         pushad
  264.         locals
  265.                 coord_y dd 55 ;ª®®à¤¨­ â  y ¤«ï ­ ç «  ¢ë¢®¤  â ¡«¨æë
  266.         endl
  267.                 mov esi,dword[offs]
  268.                 mov edi,dword[open_file_lif]
  269.                 add edi,dword[file_3ds.size] ;edi - 㪠§ â¥«ì ­  ª®­¥æ ä ©«  ¢ ¯ ¬ïâ¨
  270.                 mov dword[txt_3ds_offs.dig],0
  271.                 cld
  272.                 .cycle_rows:
  273.                         mov ebx,5 ;®âáâ㯠᫥¢  ¤«ï æ¨äà
  274.                         mov edx,5+10*24 ;®âáâ㯠᫥¢  ¤«ï ⥪áâ 
  275.                         mov ecx,10
  276.                         @@:
  277.                                 stdcall hex_in_str, txt_3ds_offs.dig, dword[esi],2
  278.                                 stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs.dig,ebx,[coord_y],0
  279.  
  280.                                 mov al,byte[esi]
  281.                                 mov byte[txt_3ds_symb],al
  282.                                 stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_symb,edx,[coord_y],0x808080
  283.                                 inc esi
  284.                                 cmp esi,dword[size_line]
  285.                                 jne .end_block
  286.                                         stdcall draw_block_end_line, dword[coord_y]
  287.                                 .end_block:
  288.                                 cmp esi,edi
  289.                                 jge @f ;jg ???
  290.                                 add ebx,24
  291.                                 add edx,9 ;è¨à¨­  1-£® ᨬ¢®«  +1pix
  292.                                 loop @b
  293.                         add dword[coord_y],10 ;¢ëá®â  1-£® ᨬ¢®«  (¨«¨ ¨­â¥à¢ « ¬¥¦¤ã áâப ¬¨)
  294.                         mov ebx,dword[buf_0.h]
  295.                         cmp dword[coord_y],ebx
  296.                         jl .cycle_rows
  297.                 @@:
  298.         popad
  299.         ret
  300. endp
  301.  
  302. align 4
  303. proc draw_block_end_line, coord_y:dword
  304.         push eax ebx ecx
  305.                 add ebx,20 ;20 = width 2.5 symbols
  306.                 mov eax,[coord_y]
  307.                 sub eax,2
  308.                 mov ecx,eax
  309.                 add ecx,10
  310.                 stdcall [buf2d_line], buf_0, 0,ecx,ebx,ecx ,0xff
  311.                 stdcall [buf2d_line], buf_0, ebx,ecx,ebx,eax ,0xff
  312.                 stdcall [buf2d_line], buf_0, ebx,eax,5+10*24-4,eax ,0xff
  313.         pop ecx ebx eax
  314.         ret
  315. endp
  316.  
  317. align 4
  318. draw_window:
  319. pushad
  320.         mcall 12,1
  321.         xor eax,eax
  322.         mov ebx,(20 shl 16)+560
  323.         mov ecx,(20 shl 16)+315
  324.         mov edx,[sc.work]
  325.         or  edx,(3 shl 24)+0x10000000+0x20000000
  326.         mov edi,capt
  327.         int 0x40
  328.  
  329.         mcall 9,procinfo,-1
  330.         mov eax,dword[procinfo.box.height]
  331.         cmp eax,250
  332.         jge @f
  333.                 mov eax,250
  334.         @@:
  335.         sub eax,65
  336.         mov dword[tree1.box_height],eax
  337.         mov word[w_scr_t1+4],ax ;­®¢ë¥ à §¬¥àë áªà®««¨­£ 
  338.         cmp eax,dword[buf_0.h] ;㢥«¨ç¨¢ ¥¬ ¢ëá®âã ¡ãä¥à 
  339.         jle @f
  340.                 stdcall [buf2d_resize],buf_0,0,eax
  341.                 mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡ãä¥à  ¢ â ©¬¥à¥
  342.         @@:
  343.  
  344.         mov eax,dword[procinfo.box.width]
  345.         cmp eax,400
  346.         jge @f
  347.                 mov eax,400
  348.         @@:
  349.         sub eax,[buf_0.w]
  350.         sub eax,41
  351.         mov dword[tree1.box_width],eax
  352.         add ax,word[tree1.box_left]
  353.         mov word[w_scr_t1.start_x],ax
  354.         add ax,16+5
  355.         mov word[buf_0.l],ax
  356.  
  357.         mov eax,8
  358.         mov ebx,(5 shl 16)+20
  359.         mov ecx,(5 shl 16)+20
  360.         mov edx,3
  361.         mov esi,[sc.work_button]
  362.         int 0x40
  363.  
  364.         mov ebx,(30 shl 16)+20
  365.         mov edx,4
  366.         int 0x40
  367.  
  368.         cmp byte[can_save],0
  369.         je @f
  370.                 mov ebx,(55 shl 16)+20
  371.                 mov edx,5
  372.                 int 0x40
  373.         @@:
  374.  
  375.         mov ebx,(85 shl 16)+20
  376.         mov edx,6 ;®ª­® á ª®®à¤¨­ â ¬¨
  377.         int 0x40
  378.  
  379.         mov ebx,(110 shl 16)+20
  380.         mov edx,7 ;㤠«¥­¨¥ ¡«®ª 
  381.         int 0x40
  382.  
  383.         mov eax,7
  384.         mov ebx,[image_data_toolbar]
  385.         mov ecx,(16 shl 16)+16
  386.         mov edx,(7 shl 16)+7 ;new
  387.         int 0x40
  388.  
  389.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  390.         mov edx,(32 shl 16)+7 ;open
  391.         int 0x40
  392.  
  393.         cmp byte[can_save],0
  394.         je @f
  395.                 add ebx,IMAGE_TOOLBAR_ICON_SIZE
  396.                 mov edx,(57 shl 16)+7 ;save
  397.                 int 0x40
  398.                 sub ebx,IMAGE_TOOLBAR_ICON_SIZE
  399.         @@:
  400.  
  401.         add ebx,4*IMAGE_TOOLBAR_ICON_SIZE
  402.         mov edx,(87 shl 16)+7
  403.         int 0x40
  404.  
  405.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  406.         mov edx,(112 shl 16)+7
  407.         int 0x40
  408.  
  409.         mov dword[w_scr_t1.all_redraw],1
  410.         stdcall [tl_draw],dword tree1
  411.  
  412.         stdcall [buf2d_draw], buf_0
  413.  
  414.         mcall 12,2
  415. popad
  416.         ret
  417.  
  418. align 4
  419. key:
  420.         mcall 2
  421.         stdcall [tl_key], dword tree1
  422.         jmp still
  423.  
  424.  
  425. align 4
  426. button:
  427.         mcall 17
  428.         cmp ah,3
  429.         jne @f
  430.                 call but_new_file
  431.                 jmp still
  432.         @@:
  433.         cmp ah,4
  434.         jne @f
  435.                 call but_open_file
  436.                 jmp still
  437.         @@:
  438.         cmp ah,5
  439.         jne @f
  440.                 call but_save_file
  441.                 jmp still
  442.         @@:
  443.         cmp ah,6
  444.         jne @f
  445.                 call but_wnd_coords
  446.                 jmp still
  447.         @@:
  448.         cmp ah,7
  449.         jne @f
  450.                 call but_delete_chunk
  451.                 jmp still
  452.         @@:
  453.  
  454.         cmp ah,1
  455.         jne still
  456. .exit:
  457.         mov dword[tree1.data_img],0
  458.         mov dword[tree1.data_img_sys],0
  459.         stdcall dword[tl_data_clear], tree1
  460.         stdcall [buf2d_delete],buf_0
  461.         stdcall [buf2d_delete],buf_1 ;㤠«ï¥¬ ¡ãä¥à
  462.         stdcall mem.Free,[image_data_toolbar]
  463.         stdcall mem.Free,[open_file_lif]
  464.         mcall -1
  465.  
  466.  
  467. align 4
  468. but_new_file:
  469.         mov byte[can_save],0
  470.         stdcall [tl_info_clear], tree1 ;®ç¨á⪠ ᯨ᪠ ®¡ê¥ªâ®¢
  471.         stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
  472.         stdcall [tl_draw], tree1
  473.         stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
  474.         ret
  475.  
  476. align 4
  477. but_open_file:
  478.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  479.         pushad
  480.         mov [OpenDialog_data.type],0
  481.         stdcall [OpenDialog_Start],OpenDialog_data
  482.         cmp [OpenDialog_data.status],2
  483.         je .end_open_file
  484.         ;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
  485.  
  486.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  487.         mov [run_file_70.Function], 0
  488.         mov [run_file_70.Position], 0
  489.         mov [run_file_70.Flags], 0
  490.         mov dword[run_file_70.Count], MAX_FILE_SIZE
  491.         m2m [run_file_70.Buffer], dword[open_file_lif]
  492.         mov byte[run_file_70+20], 0
  493.         mov dword[run_file_70.FileName], openfile_path
  494.         mov ebx,run_file_70
  495.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  496.         cmp ebx,0xffffffff
  497.         je .end_open_file
  498.  
  499.         mov [open_file_size],ebx
  500.         ;mcall 71,1,openfile_path
  501.  
  502.         mov byte[can_save],0
  503.         call init_tree
  504.         stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
  505.  
  506.         .end_open_file:
  507.         popad
  508.         ret
  509.  
  510. align 4
  511. init_tree:
  512.         stdcall [tl_info_clear], tree1 ;®ç¨á⪠ ᯨ᪠ ®¡ê¥ªâ®¢
  513.  
  514.         mov esi,dword[open_file_lif]
  515.         cmp word[esi],CHUNK_MAIN
  516.         je @f
  517.                 call buf_draw_beg
  518.                 stdcall [buf2d_draw_text], buf_0, buf_1,txt_no_3ds,5,25,0xff0000 ;à¨á㥬 áâபã á ⥪á⮬
  519.                 jmp .end_open
  520.         @@:
  521.         cmp dword[esi+2],MAX_FILE_SIZE
  522.         jle @f
  523.                 call buf_draw_beg
  524.                 stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_big_file,5,25,0xff0000 ;à¨á㥬 áâபã á ⥪á⮬
  525.                 jmp .end_open
  526.         @@:
  527.         ;--- ®¡à ¡®âª  ®âªàë⮣® *.3ds ä ©« 
  528.         mov eax,file_3ds
  529.         mov dword[level_stack],0 ;®¡­ã«ï¥¬ ã஢¥­ì á⥪ 
  530.         mov dword[offs_last_timer],0
  531.         ;--- ¤®¡ ¢«¥­¨¥ £« ¢­®£® ¡«®ª  ¢ ᯨ᮪
  532.         stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2],0
  533.         call block_children ;¢å®¤ ¢ ¤®ç¥à­¨© ¡«®ª
  534.  
  535.         mov edi,dword[file_3ds.offs]
  536.         add edi,dword[file_3ds.size]
  537.         .cycle_main:
  538.                 cmp dword[level_stack],0
  539.                 jle .end_cycle
  540.                
  541.                 cmp esi,edi ;¥á«¨ ª®­¥æ ä ©« 
  542.                 jge .end_cycle
  543.  
  544.                 mov edx,dword[esi+2] ;à §¬¥à ¡«®ª 
  545.                 call block_analiz
  546.                 cmp dword[bl_found],0
  547.                 jne @f
  548.                         ;®¡ê¥ªâ ­¥ ¨§¢¥áâ­®£® ¢¨¤ 
  549.                         stdcall add_3ds_object, ID_ICON_CHUNK_NOT_FOUND,dword[level_stack],edx,0
  550.                         call block_next
  551.                         jmp .cycle_main
  552.                 @@:
  553.                         ;®¡ê¥ªâ ¨§¢¥áâ­®£® ¢¨¤ 
  554.                         mov ecx,dword[bl_found]
  555.                         mov bx,word[ecx+2] ;­®¬¥à ¨ª®­ª¨ ¤«ï ®¡ê¥ªâ 
  556.                         stdcall add_3ds_object, ebx,dword[level_stack],edx,dword[ecx+5]
  557.                         cmp byte[ecx+4],1
  558.                         je .bl_data
  559.                                 ;¡«®ª ᮤ¥à¦¨â ¤®ç¥à­¨¥ ¡«®ª¨
  560.                                 call block_children ;¢å®¤ ¢ ¤®ç¥à­¨© ¡«®ª
  561.                                 jmp .cycle_main
  562.                         .bl_data:
  563.                                 ;¡«®ª ᮤ¥à¦¨â ¤ ­­ë¥
  564.                                 call block_analiz_data
  565.                                 jmp .cycle_main
  566.         .end_cycle:
  567.                 stdcall [tl_cur_beg], tree1
  568.                 stdcall [tl_draw], tree1
  569.         .end_open:
  570.         ret
  571.  
  572. ; ­ «¨§ ¤ ­­ëå ¡«®ª 
  573. ;input:
  574. ; esi - memory pointer
  575. ;output:
  576. ; eax - new stack pointer
  577. ; esi - new memory pointer
  578. align 4
  579. block_analiz_data:
  580.         push ebx ecx edx edi
  581.                 mov dx,word[esi]
  582.                 mov ecx,dword[esi+2]
  583.                 sub ecx,6 ;à §¬¥à ¤ ­­ëå ¢ ¡«®ª¥
  584.                 add esi,6
  585.                 mov ebx,dword[level_stack]
  586.                 inc ebx
  587.                 ; ***  ­ «¨§ ¡«®ª®¢ á à §­ë¬¨ ¤ ­­ë¬¨ ¨ ¢ë¤¥«¥­¨¥¬ ¯®¤¡«®ª®¢
  588.                 cmp dx,CHUNK_OBJBLOCK ;®¡ê¥ªâ
  589.                 jne @f
  590.                         push ax
  591.                                 cld
  592.                                 xor al,al
  593.                                 mov edi,esi
  594.                                 repne scasb
  595.                         pop ax
  596.                         sub edi,esi ;edi - strlen
  597.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;­ §¢ ­¨¥ ®¡ê¥ªâ 
  598.                         add esi,edi
  599.                         ;sub ecx,edi ;㦥 ᤥ« ­® ¢ repne
  600.                         jmp .next_bl
  601.                 @@:
  602.                 cmp dx,CHUNK_VERTLIST ;ᯨ᮪ ¢¥à設
  603.                 je .vertexes
  604.                 cmp dx,0x4111 ;ä« £¨ ¢¥à設
  605.                 je .vertexes
  606.                 cmp dx,CHUNK_MAPLIST ;⥪áâãà­ë¥ ª®®à¤¨­ âë
  607.                 je .vertexes
  608.                 jmp @f
  609.                 .vertexes: ;®¡à ¡®âª  ¡«®ª®¢, ᮤ¥à¦ é¨å ¤ ­­ë¥ ¢¥à設
  610.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;ç¨á«® ¢¥à設
  611.                         add esi,2
  612.                         sub ecx,2
  613.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;¤ ­­ë¥ ¢¥à設
  614.                         sub esi,8 ;¢®ááâ ­®¢«¥­¨¥ esi
  615.                         call block_next
  616.                         jmp .end_f             
  617.                 @@:
  618.                 cmp dx,CHUNK_FACELIST ;ᯨ᮪ £à ­¥©
  619.                 jne @f
  620.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;ç¨á«® £à ­¥©
  621.                         push eax
  622.                         xor eax,eax
  623.                         mov ax,[esi]
  624.                         shl eax,3
  625.                         add esi,2
  626.                         sub ecx,2
  627.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,eax,0 ;¤ ­­ë¥ ¢¥à設
  628.  
  629.                         sub ecx,eax
  630.                         cmp ecx,1
  631.                         jl .data_3 ;¯à®¢¥à塞 ¥áâì «¨ ¡«®ª ®¯¨á뢠î騩 ¬ â¥à¨ «, ¯à¨¬¥­ï¥¬ë© ª ®¡ê¥ªâã
  632.                                 add esi,eax
  633.                                 pop eax
  634.                                 jmp .next_bl
  635.                                 ;stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;¤ ­­ë¥ ¬ â¥à¨ « 
  636.                                 ;sub esi,eax ;¢®ááâ ­®¢«¥­¨¥ esi
  637.                         .data_3:
  638.  
  639.                         sub esi,8 ;¢®ááâ ­®¢«¥­¨¥ esi
  640.                         pop eax
  641.                         call block_next
  642.                         jmp .end_f             
  643.                 @@:
  644.                 cmp dx,CHUNK_FACEMAT ;¬ â¥à¨ «ë £à ­¥©
  645.                 jne @f
  646.                         push ax
  647.                                 cld
  648.                                 xor al,al
  649.                                 mov edi,esi
  650.                                 repne scasb
  651.                         pop ax
  652.                         sub edi,esi ;edi - strlen
  653.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ;­ §¢ ­¨¥ ®¡ê¥ªâ 
  654.                         add esi,edi
  655.                         ;sub ecx,edi ;㦥 ᤥ« ­® ¢ repne
  656.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,2,txt_count ;ç¨á«® £à ­¥©
  657.                         add esi,2
  658.                         sub ecx,2
  659.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;­®¬¥à  £à ­¥©, ª ª®â®àë¬ ¯à¨¬¥­¥­ ¬ â¥à¨ «
  660.                         sub esi,edi ;¢®ááâ ­®¢«¥­¨¥ esi (1)
  661.                         sub esi,8   ;¢®ááâ ­®¢«¥­¨¥ esi (2)
  662.                         call block_next
  663.                         jmp .end_f
  664.                 @@:
  665.                 ; ***  ­ «¨§ ¡«®ª  á ¤ ­­ë¬¨ ¯® 㬮«ç ­¨î (¡¥§ ¢ë¤¥«¥­¨ï ¯®¤¡«®ª®¢)
  666.                         stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0
  667.                         sub esi,6 ;¢®ááâ ­®¢«¥­¨¥ esi
  668.                         call block_next
  669.                         jmp .end_f
  670.                 .next_bl:
  671.                 ; *** ­ áâனª¨ ¤«ï  ­ «¨§  ®áâ ¢è¨åáï ¯®¤¡«®ª®¢
  672.                         mov dword[eax],esi ;㪠§ â¥«ì ­  ­ ç «® ¡«®ª 
  673.                         mov ebx,dword[esi+2]
  674.                         mov dword[eax+4],ebx ;à §¬¥à ¡«®ª 
  675.                         inc dword[level_stack]
  676.                         add eax,8
  677.                 .end_f:
  678.         pop edi edx ecx ebx
  679.         ret
  680.  
  681. ;¢å®¤ ¢ 1-© ¤®ç¥à­¨© ¡«®ª
  682. ;output:
  683. ; edx - destroy
  684. align 4
  685. block_children:
  686.         push ecx
  687.                 ;¯à®¢¥àª  ¯à ¢¨«ì­®á⨠ࠧ¬¥à®¢ ¤®ç¥à­¥£® ¡«®ª 
  688.                 mov ebx,esi ;ᬥ饭¨¥ ­ ç «  த¨â¥«ì᪮£® ¡«®ª 
  689.                 add ebx,6 ;¯¥à¥å®¤ ­  ­ ç «® ¤®ç¥à­¥£® ¡«®ª 
  690.                 add ebx,dword[ebx+2] ;¤®¡ ¢«ï¥¬ à §¬¥à ¤®ç¥à­¥£® ¡«®ª 
  691.                 mov ecx,esi ;ᬥ饭¨¥ ­ ç «  த¨â¥«ì᪮£® ¡«®ª 
  692.                 add ecx,dword[esi+2] ;¤®¡ ¢«ï¥¬ à §¬¥à த¨â¥«ì᪮£® ¡«®ª 
  693.                 cmp ebx,ecx ;ãç¨â뢠âì § £®«®¢ª¨ ­¥ ­ã¦­®, â. ª. áà ¢­¨¢ îâáï ⮫쪮 ¤ ­­ë¥ ¡«®ª®¢
  694.                 jle @f
  695.                         ;¤¨ £­®áâ¨à®¢ «¨ ®è¨¡ªã ä ©« , ¤®ç¥à­¨© ¡«®ª ¢ë室¨â §  ¯à¥¤¥«ë த¨â¥«ì᪮£®
  696.                         mov dword[level_stack],FILE_ERROR_CHUNK_SIZE
  697.                         jmp .end_f
  698.                 @@:
  699.                 mov dword[eax],esi ;㪠§ â¥«ì ­  ­ ç «® ¡«®ª 
  700.                 mov ebx,dword[esi+2]
  701.                 mov dword[eax+4],ebx ;à §¬¥à ¡«®ª 
  702.                 add esi,6 ;¯¥à¥å®¤¨¬ ª ¤ ­­ë¬ ¡«®ª 
  703.                 inc dword[level_stack]
  704.                 add eax,8
  705.         .end_f:
  706.         pop ecx
  707.         ret
  708.  
  709. ;¯¥à¥å®¤ ª á«¥¤ã饬㠡«®ªã ⥪ã饣® ã஢­ï
  710. ;input:
  711. ; eax -  ¤à¥á áâàãªâãàë á ¯¥à¥¬¥­­ë¬¨
  712. align 4
  713. block_next:
  714. push ebx
  715.         add esi,dword[esi+2] ;¯à®¯ã᪠¥¬ ¤ ­­ë¥ ¡«®ª 
  716.  
  717.         ;¯à®¢¥àª  à §¬¥à®¢ த¨â¥«ì᪮£® ¡«®ª , ¤«ï ¢®§¬®¦­®£® ¢ë室  ­  ¢¥àå­¨© ã஢¥­ì ¥á«¨ ª®­¥æ ¡«®ª 
  718.         @@:
  719.         mov ebx,dword[eax-8]
  720.         add ebx,dword[eax-4]
  721.         cmp esi,ebx
  722.         jl @f
  723.                 dec dword[level_stack]
  724.                 sub eax,8
  725.                 cmp dword[level_stack],0
  726.                 jg @b
  727.         @@:
  728. pop ebx
  729.         ret
  730.  
  731. ;äã­ªæ¨ï ¯®¨áª  áâàãªâãàë ®¯¨á뢠î饩 ¡«®ª
  732. ;input:
  733. ;esi - memory pointer
  734. ;output:
  735. ;dword[bl_found] - pointer to chunk struct (= 0 if not found)
  736. align 4
  737. bl_found dd 0
  738. block_analiz:
  739. pushad
  740.         mov dword[bl_found],0
  741.         mov ecx,type_bloks
  742.         @@:
  743.                 mov bx,word[ecx]
  744.                 cmp word[esi],bx
  745.                 je .found
  746.                 add ecx,sizeof.block_3ds
  747.                 cmp ecx,type_bloks.end
  748.                 jl @b
  749.         jmp .no_found
  750.         .found:
  751.                 mov dword[bl_found],ecx
  752.         .no_found:
  753. popad
  754.         ret
  755.  
  756. ;input:
  757. ; esi - 㪠§ â¥«ì ­   ­ «¨§¨àã¥¬ë¥ ¤ ­­ë¥
  758. ; level - ã஢¥­ì ¢«®¦¥­­®á⨠㧫 
  759. ; size_bl - à §¬¥à ¡«®ª 
  760. align 4
  761. proc add_3ds_object, icon:dword,level:dword,size_bl:dword,info_bl:dword
  762.         pushad
  763.                 mov bx,word[icon]
  764.                 shl ebx,16
  765.                 mov bx,word[level]
  766.  
  767.                 mov eax,esi
  768.                 sub eax,dword[open_file_lif]
  769.                 mov dword[buffer],eax ;ᬥ饭¨¥ ¡«®ª 
  770.                 mov ecx,dword[size_bl]
  771.                 mov dword[buffer+4],ecx ;à §¬¥à ¡«®ª  (¨á¯®«ì§ã¥âáï ¢ ä㭪樨 buf_draw_hex_table ¤«ï à¨á®¢ ­¨ï «¨­¨¨)
  772.                 mov ecx,dword[bl_found]
  773.                 cmp ecx,0
  774.                 je @f
  775.                         ;... §¤¥áì ­ã¦¥­ ¤à㣮©  «£®à¨â¬ § é¨âë ®â 㤠«¥­¨ï
  776.                         mov cl,byte[ecx+4]
  777.                 @@:
  778.                 mov byte[buffer+list_offs_chunk_del],cl
  779.                 mov ecx,[level]
  780.                 mov byte[buffer+list_offs_chunk_lev],cl
  781.                 mov ecx,dword[info_bl]
  782.                 mov dword[buffer+list_offs_p_data],ecx
  783.                 stdcall hex_in_str, buffer+list_offs_text,dword[esi+1],2
  784.                 stdcall hex_in_str, buffer+list_offs_text+2,dword[esi],2 ;ª®¤ 3ds ¡«®ª 
  785.                 cmp ecx,0
  786.                 jne @f
  787.                         mov byte[buffer+list_offs_text+4],0 ;0 - ᨬ¢®« ª®­æ  áâப¨
  788.                         jmp .no_capt
  789.                 @@:
  790.                         mov byte[buffer+list_offs_text+4],' '
  791.                         mov esi,ecx
  792.                         mov edi,buffer+list_offs_text+5
  793.                         mov ecx,size_one_list-(list_offs_text+5)
  794.                         cld
  795.                         rep movsb
  796.                         mov byte[buffer+size_one_list-1],0 ;0 - ᨬ¢®« ª®­¥æ  áâப¨
  797.                 .no_capt:
  798.                 stdcall [tl_node_add], buffer, ebx, tree1
  799.                 stdcall [tl_cur_next], tree1
  800.                 if debug
  801.                         stdcall print_err,sz_add_3ds_object,buffer+list_offs_text
  802.                 end if
  803.         popad
  804.         ret
  805. endp
  806.  
  807. if debug
  808. sz_add_3ds_object db 13,10,'3ds_object',0
  809.  
  810. align 4
  811. proc print_err, fun:dword, mes:dword ;¢ë¢®¤¨¬ á®®¡é¥­¨¥ ®¡ 訡ª¥ ­  ¤®áªã ®â« ¤ª¨
  812.         pushad
  813.         mov eax,63
  814.         mov ebx,1
  815.  
  816.         mov esi,[fun]
  817.         @@:
  818.                 mov cl,byte[esi]
  819.                 int 0x40
  820.                 inc esi
  821.                 cmp byte[esi],0
  822.                 jne @b
  823.         mov cl,':'
  824.         int 0x40
  825.         mov cl,' '
  826.         int 0x40
  827.         mov esi,[mes]
  828.         @@:
  829.                 mov cl,byte[esi]
  830.                 int 0x40
  831.                 inc esi
  832.                 cmp byte[esi],0
  833.                 jne @b
  834.         popad
  835.         ret
  836. endp
  837. end if
  838.  
  839. align 4
  840. proc hex_in_str, buf:dword,val:dword,zif:dword
  841.         pushad
  842.                 mov edi,dword[buf]
  843.                 mov ecx,dword[zif]
  844.                 add edi,ecx
  845.                 dec edi
  846.                 mov ebx,dword[val]
  847.  
  848.                 .cycle:
  849.                         mov al,bl
  850.                         and al,0xf
  851.                         cmp al,10
  852.                         jl @f
  853.                                 add al,'a'-'0'-10
  854.                         @@:
  855.                         add al,'0'
  856.                         mov byte[edi],al
  857.                         dec edi
  858.                         shr ebx,4
  859.                 loop .cycle
  860.  
  861.         popad
  862.         ret
  863. endp
  864.  
  865. align 4
  866. but_save_file:
  867.         pushad
  868.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  869.         mov [OpenDialog_data.type],1
  870.         stdcall [OpenDialog_Start],OpenDialog_data
  871.         cmp [OpenDialog_data.status],2
  872.         je .end_save_file
  873.         ;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
  874.  
  875.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  876.         mov [run_file_70.Function], 2
  877.         mov [run_file_70.Position], 0
  878.         mov [run_file_70.Flags], 0
  879.         mov ebx, dword[open_file_lif]
  880.         mov [run_file_70.Buffer], ebx
  881.         mov ebx,dword[ebx+2]
  882.         mov dword[run_file_70.Count], ebx ;à §¬¥à ä ©« 
  883.         mov byte[run_file_70+20], 0
  884.         mov dword[run_file_70.FileName], openfile_path
  885.         mov ebx,run_file_70
  886.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  887.         cmp ebx,0xffffffff
  888.         je .end_save_file
  889.  
  890.         .end_save_file:
  891.         popad
  892.         ret
  893.  
  894. align 4
  895. but_wnd_coords:
  896.         cmp byte[prop_wnd_run],0
  897.         jne @f
  898.                 pushad
  899.                 mcall 51,1,prop_start,thread_coords
  900.                 popad
  901.         @@:
  902.         ret
  903.  
  904. ;description:
  905. ; 㤠«¥­¨¥ ¢ë¡à ­­®£® ¡«®ª  ¨§ ®âªàë⮣® ä ©« 
  906. align 4
  907. but_delete_chunk:
  908.         pushad
  909.         stdcall [tl_node_get_data],tree1
  910.         pop ebx
  911.         cmp ebx,0
  912.         je .end_f
  913.         cmp byte[ebx+list_offs_chunk_del],0 ;¥á«¨ ¡«®ª § é¨é¥­ ®â 㤠«¥­¨ï
  914.         jne .notify
  915.  
  916.         ;(1) ª®¯¨à®¢ ­¨¥ ­¨¦­¥© ç á⨠䠩« 
  917.         mov edx,dword[ebx+4] ;à §¬¥à ¡«®ª 
  918.         sub [open_file_size],edx ;¨§¬¥­¥­¨¥ à §¬¥à®¢ ä ©« 
  919.         mov ecx,[open_file_size]
  920.         mov eax,dword[ebx] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
  921.         sub ecx,eax ;ecx - à §¬¥à ­¨¦­¥© ᤢ¨£ ¥¬®© ç á⨠䠩« 
  922.         add eax,dword[open_file_lif] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
  923.         mov edi,eax
  924.         mov esi,eax
  925.         add esi,edx
  926.         mov al,byte[ebx+list_offs_chunk_lev] ;¡¥à¥¬ ã஢¥­ì ⥪ã饣® 㧫 
  927.         rep movsb
  928.         mov byte[can_save],1
  929.  
  930.         ;(2) ¨§¬¥­¥­¨¥ à §¬¥à®¢ த¨â¥«ìáª¨å ¡«®ª®¢
  931.         cmp al,0
  932.         je .end_2
  933.         .cycle_2:
  934.         stdcall [tl_cur_perv], tree1
  935.         stdcall [tl_node_get_data],tree1
  936.         pop ebx
  937.         cmp ebx,0
  938.         je .end_2
  939.                 cmp byte[ebx+list_offs_chunk_lev],al
  940.                 jge .cycle_2
  941.                 mov al,byte[ebx+list_offs_chunk_lev]
  942.                 mov ecx,[ebx]
  943.                 add ecx,[open_file_lif]
  944.                 sub dword[ecx+2],edx
  945.                 cmp al,0 ;¥á«¨ á ¬ë© ¢¥àå­¨© 㧥«, â® al=0
  946.                 jne .cycle_2
  947.         .end_2:
  948.        
  949.         ;(3) ®¡­®¢«¥­¨¥ ᯨ᪠ tree1
  950.         call init_tree
  951.         call draw_window
  952.  
  953.         jmp .end_f
  954.         .notify:
  955.         notify_window_run txt_not_delete
  956.         .end_f:
  957.         popad
  958.         ret
  959.  
  960. ;input:
  961. ; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
  962. ;output:
  963. ; eax - ç¨á«®
  964. align 4
  965. proc conv_str_to_int uses ebx ecx esi, buf:dword
  966.         xor eax,eax
  967.         xor ebx,ebx
  968.         mov esi,[buf]
  969.         ;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
  970.         xor ecx,ecx
  971.         inc ecx
  972.         cmp byte[esi],'-'
  973.         jne @f
  974.                 dec ecx
  975.                 inc esi
  976.         @@:
  977.  
  978.         cmp word[esi],'0x'
  979.         je .load_digit_16
  980.  
  981.         .load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
  982.                 mov bl,byte[esi]
  983.                 cmp bl,'0'
  984.                 jl @f
  985.                 cmp bl,'9'
  986.                 jg @f
  987.                         sub bl,'0'
  988.                         imul eax,10
  989.                         add eax,ebx
  990.                         inc esi
  991.                         jmp .load_digit_10
  992.         jmp @f
  993.  
  994.         .load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
  995.                 add esi,2
  996.         .cycle_16:
  997.                 mov bl,byte[esi]
  998.                 cmp bl,'0'
  999.                 jl @f
  1000.                 cmp bl,'f'
  1001.                 jg @f
  1002.                 cmp bl,'9'
  1003.                 jle .us1
  1004.                         cmp bl,'A'
  1005.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
  1006.                 .us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
  1007.                 cmp bl,'F'
  1008.                 jle .us2
  1009.                         cmp bl,'a'
  1010.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
  1011.                         sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
  1012.                 .us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
  1013.                         sub bl,'0'
  1014.                         cmp bl,9
  1015.                         jle .cor1
  1016.                                 sub bl,7 ;convert 'A' to '10'
  1017.                         .cor1:
  1018.                         shl eax,4
  1019.                         add eax,ebx
  1020.                         inc esi
  1021.                         jmp .cycle_16
  1022.         @@:
  1023.         cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  1024.         jne @f
  1025.                 sub ecx,eax
  1026.                 mov eax,ecx
  1027.         @@:
  1028.         ret
  1029. endp
  1030.  
  1031. ;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
  1032. align 4
  1033. OpenDialog_data:
  1034. .type                   dd 0 ;0 - ®âªàëâì, 1 - á®åà ­¨âì, 2 - ¢ë¡à âì ¤â४â®à¨î
  1035. .procinfo               dd procinfo     ;+4
  1036. .com_area_name          dd communication_area_name      ;+8
  1037. .com_area               dd 0    ;+12
  1038. .opendir_path           dd plugin_path  ;+16
  1039. .dir_default_path       dd default_dir ;+20
  1040. .start_path             dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢
  1041. .draw_window            dd draw_window  ;+28
  1042. .status                 dd 0    ;+32
  1043. .openfile_path          dd openfile_path        ;+36 ¯ãâì ª ®âªà뢠¥¬®¬ã ä ©«ã
  1044. .filename_area          dd filename_area        ;+40
  1045. .filter_area            dd Filter
  1046. .x:
  1047. .x_size                 dw 420 ;+48 ; Window X size
  1048. .x_start                dw 10 ;+50 ; Window X position
  1049. .y:
  1050. .y_size                 dw 320 ;+52 ; Window y size
  1051. .y_start                dw 10 ;+54 ; Window Y position
  1052.  
  1053. default_dir db '/rd/1',0
  1054.  
  1055. communication_area_name:
  1056.         db 'FFFFFFFF_open_dialog',0
  1057. open_dialog_name:
  1058.         db 'opendial',0
  1059. communication_area_default_path:
  1060.         db '/rd/1/File managers/',0
  1061.  
  1062. Filter:
  1063. dd Filter.end - Filter.1
  1064. .1:
  1065. db '3DS',0
  1066. db 'TXT',0
  1067. .end:
  1068. db 0
  1069.  
  1070.  
  1071.  
  1072. head_f_i:
  1073. head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
  1074.  
  1075. system_dir_0 db '/sys/lib/'
  1076. lib_name_0 db 'proc_lib.obj',0
  1077. err_message_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
  1078. err_message_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
  1079.  
  1080. system_dir_1 db '/sys/lib/'
  1081. lib_name_1 db 'libimg.obj',0
  1082. err_message_found_lib_1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'libimg.obj',39,0
  1083. err_message_import_1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libimg.obj',39,0
  1084.  
  1085. system_dir_2 db '/sys/lib/'
  1086. lib_name_2 db 'box_lib.obj',0
  1087. err_msg_found_lib_2 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'box_lib.obj',39,0
  1088. err_msg_import_2 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'box_lib',39,0
  1089.  
  1090. system_dir_3 db '/sys/lib/'
  1091. lib_name_3 db 'buf2d.obj',0
  1092. err_msg_found_lib_3 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'buf2d.obj',39,0
  1093. err_msg_import_3 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'buf2d',39,0
  1094.  
  1095. l_libs_start:
  1096.         lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
  1097.                 err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
  1098.         lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
  1099.                 err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
  1100.         lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
  1101.                 err_msg_found_lib_2,head_f_l,import_box_lib,err_msg_import_2,head_f_i
  1102.         lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\
  1103.                 err_msg_found_lib_3,head_f_l,import_buf2d,err_msg_import_3,head_f_i
  1104. l_libs_end:
  1105.  
  1106. align 4
  1107. import_libimg:
  1108.         dd alib_init1
  1109.         img_is_img  dd aimg_is_img
  1110.         img_info    dd aimg_info
  1111.         img_from_file dd aimg_from_file
  1112.         img_to_file dd aimg_to_file
  1113.         img_from_rgb dd aimg_from_rgb
  1114.         img_to_rgb  dd aimg_to_rgb
  1115.         img_to_rgb2 dd aimg_to_rgb2
  1116.         img_decode  dd aimg_decode
  1117.         img_encode  dd aimg_encode
  1118.         img_create  dd aimg_create
  1119.         img_destroy dd aimg_destroy
  1120.         img_destroy_layer dd aimg_destroy_layer
  1121.         img_count   dd aimg_count
  1122.         img_lock_bits dd aimg_lock_bits
  1123.         img_unlock_bits dd aimg_unlock_bits
  1124.         img_flip    dd aimg_flip
  1125.         img_flip_layer dd aimg_flip_layer
  1126.         img_rotate  dd aimg_rotate
  1127.         img_rotate_layer dd aimg_rotate_layer
  1128.         img_draw    dd aimg_draw
  1129.  
  1130.         dd 0,0
  1131.         alib_init1   db 'lib_init',0
  1132.         aimg_is_img  db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ­­ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª  ᤥ« âì ¨§ ­¨å ¨§®¡à ¦¥­¨¥
  1133.         aimg_info    db 'img_info',0
  1134.         aimg_from_file db 'img_from_file',0
  1135.         aimg_to_file db 'img_to_file',0
  1136.         aimg_from_rgb db 'img_from_rgb',0
  1137.         aimg_to_rgb  db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¢ ¤ ­­ë¥ RGB
  1138.         aimg_to_rgb2 db 'img_to_rgb2',0
  1139.         aimg_decode  db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ­­ëå
  1140.         aimg_encode  db 'img_encode',0
  1141.         aimg_create  db 'img_create',0
  1142.         aimg_destroy db 'img_destroy',0
  1143.         aimg_destroy_layer db 'img_destroy_layer',0
  1144.         aimg_count   db 'img_count',0
  1145.         aimg_lock_bits db 'img_lock_bits',0
  1146.         aimg_unlock_bits db 'img_unlock_bits',0
  1147.         aimg_flip    db 'img_flip',0
  1148.         aimg_flip_layer db 'img_flip_layer',0
  1149.         aimg_rotate  db 'img_rotate',0
  1150.         aimg_rotate_layer db 'img_rotate_layer',0
  1151.         aimg_draw    db 'img_draw',0
  1152.  
  1153. align 4
  1154. proclib_import: ;®¯¨á ­¨¥ íªá¯®àâ¨à㥬ëå ä㭪権
  1155.         OpenDialog_Init dd aOpenDialog_Init
  1156.         OpenDialog_Start dd aOpenDialog_Start
  1157. dd 0,0
  1158.         aOpenDialog_Init db 'OpenDialog_init',0
  1159.         aOpenDialog_Start db 'OpenDialog_start',0
  1160.  
  1161. align 4
  1162. import_buf2d:
  1163.         dd sz_init0
  1164.         buf2d_create dd sz_buf2d_create
  1165.         buf2d_create_f_img dd sz_buf2d_create_f_img
  1166.         buf2d_clear dd sz_buf2d_clear
  1167.         buf2d_draw dd sz_buf2d_draw
  1168.         buf2d_delete dd sz_buf2d_delete
  1169.         buf2d_resize dd sz_buf2d_resize
  1170.         buf2d_line dd sz_buf2d_line
  1171.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  1172.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  1173.         buf2d_circle dd sz_buf2d_circle
  1174.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  1175.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  1176.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  1177.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  1178.         buf2d_bit_blt dd sz_buf2d_bit_blt
  1179.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  1180.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  1181.         buf2d_curve_bezier dd sz_buf2d_curve_bezier
  1182.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  1183.         buf2d_draw_text dd sz_buf2d_draw_text
  1184.         buf2d_crop_color dd sz_buf2d_crop_color
  1185.         buf2d_offset_h dd sz_buf2d_offset_h
  1186.         buf2d_flood_fill dd sz_buf2d_flood_fill
  1187.         buf2d_set_pixel dd sz_buf2d_set_pixel
  1188.         dd 0,0
  1189.         sz_init0 db 'lib_init',0
  1190.         sz_buf2d_create db 'buf2d_create',0
  1191.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  1192.         sz_buf2d_clear db 'buf2d_clear',0
  1193.         sz_buf2d_draw db 'buf2d_draw',0
  1194.         sz_buf2d_delete db 'buf2d_delete',0
  1195.         sz_buf2d_resize db 'buf2d_resize',0
  1196.         sz_buf2d_line db 'buf2d_line',0
  1197.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
  1198.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  1199.         sz_buf2d_circle db 'buf2d_circle',0
  1200.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  1201.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  1202.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  1203.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  1204.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  1205.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  1206.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  1207.         sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  1208.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  1209.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  1210.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  1211.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  1212.         sz_buf2d_flood_fill db 'buf2d_flood_fill',0
  1213.         sz_buf2d_set_pixel db 'buf2d_set_pixel',0
  1214.  
  1215. align 4
  1216. import_box_lib:
  1217.         dd sz_init1
  1218.         init_checkbox dd sz_init_checkbox
  1219.         check_box_draw dd sz_check_box_draw
  1220.         edit_box_draw dd sz_edit_box_draw
  1221.         edit_box_key dd sz_edit_box_key
  1222.         edit_box_mouse dd sz_edit_box_mouse
  1223.         edit_box_set_text dd sz_edit_box_set_text
  1224.         scrollbar_ver_draw dd sz_scrollbar_ver_draw
  1225.         scrollbar_hor_draw dd sz_scrollbar_hor_draw
  1226.  
  1227.         tl_data_init dd sz_tl_data_init
  1228.         tl_data_clear dd sz_tl_data_clear
  1229.         tl_info_clear dd sz_tl_info_clear
  1230.         tl_key dd sz_tl_key
  1231.         tl_mouse dd sz_tl_mouse
  1232.         tl_draw dd sz_tl_draw
  1233.         tl_info_undo dd sz_tl_info_undo
  1234.         tl_info_redo dd sz_tl_info_redo
  1235.         tl_node_add dd sz_tl_node_add
  1236.         tl_node_set_data dd sz_tl_node_set_data
  1237.         tl_node_get_data dd sz_tl_node_get_data
  1238.         tl_node_delete dd sz_tl_node_delete
  1239.         tl_node_move_up dd sz_tl_node_move_up
  1240.         tl_node_move_down dd sz_tl_node_move_down
  1241.         tl_cur_beg dd sz_tl_cur_beg
  1242.         tl_cur_next dd sz_tl_cur_next
  1243.         tl_cur_perv dd sz_tl_cur_perv
  1244.         tl_node_close_open dd sz_tl_node_close_open
  1245.         tl_node_lev_inc dd sz_tl_node_lev_inc
  1246.         tl_node_lev_dec dd sz_tl_node_lev_dec
  1247.         tl_node_poi_get_info dd sz_tl_node_poi_get_info
  1248.         tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info
  1249.         tl_node_poi_get_data dd sz_tl_node_poi_get_data
  1250.  
  1251.         dd 0,0
  1252.         sz_init1 db 'lib_init',0
  1253.         sz_init_checkbox db 'init_checkbox2',0
  1254.         sz_check_box_draw db 'check_box_draw2',0
  1255.         sz_edit_box_draw db 'edit_box',0
  1256.         sz_edit_box_key db 'edit_box_key',0
  1257.         sz_edit_box_mouse db 'edit_box_mouse',0
  1258.         sz_edit_box_set_text db 'edit_box_set_text',0
  1259.         sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
  1260.         sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
  1261.  
  1262.         sz_tl_data_init db 'tl_data_init',0
  1263.         sz_tl_data_clear db 'tl_data_clear',0
  1264.         sz_tl_info_clear db 'tl_info_clear',0
  1265.         sz_tl_key db 'tl_key',0
  1266.         sz_tl_mouse db 'tl_mouse',0
  1267.         sz_tl_draw db 'tl_draw',0
  1268.         sz_tl_info_undo db 'tl_info_undo',0
  1269.         sz_tl_info_redo db 'tl_info_redo',0
  1270.         sz_tl_node_add db 'tl_node_add',0
  1271.         sz_tl_node_set_data db 'tl_node_set_data',0
  1272.         sz_tl_node_get_data db 'tl_node_get_data',0
  1273.         sz_tl_node_delete db 'tl_node_delete',0
  1274.         sz_tl_node_move_up db 'tl_node_move_up',0
  1275.         sz_tl_node_move_down db 'tl_node_move_down',0
  1276.         sz_tl_cur_beg db 'tl_cur_beg',0
  1277.         sz_tl_cur_next db 'tl_cur_next',0
  1278.         sz_tl_cur_perv db 'tl_cur_perv',0
  1279.         sz_tl_node_close_open db 'tl_node_close_open',0
  1280.         sz_tl_node_lev_inc db 'tl_node_lev_inc',0
  1281.         sz_tl_node_lev_dec db 'tl_node_lev_dec',0
  1282.         sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0
  1283.         sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0
  1284.         sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
  1285.  
  1286.  
  1287.  
  1288. mouse_dd dd 0x0
  1289. sc system_colors
  1290. last_time dd 0
  1291.  
  1292. align 16
  1293. procinfo process_information
  1294.  
  1295. align 4
  1296. buf_0: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  1297. .l: dw 205 ;+4 left
  1298. .t: dw 35 ;+6 top
  1299. .w: dd 340 ;+8 w
  1300. .h: dd 250 ;+12 h
  1301. .color: dd 0xffffd0 ;+16 color
  1302.         db 24 ;+20 bit in pixel
  1303.  
  1304. align 4
  1305. buf_1:
  1306.         dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  1307.         dw 25 ;+4 left
  1308.         dw 25 ;+6 top
  1309.         dd 128 ;+8 w
  1310.         dd 144 ;+12 h
  1311.         dd 0 ;+16 color
  1312.         db 24 ;+20 bit in pixel
  1313.  
  1314. el_focus dd tree1
  1315. tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
  1316.         16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 16,list_offs_text,0, el_focus,\
  1317.         w_scr_t1,0
  1318.  
  1319. align 4
  1320. w_scr_t1:
  1321. .size_x     dw 16 ;+0
  1322. .start_x    dw 0
  1323. rb 2+2
  1324. .btn_high   dd 15 ;+8
  1325. .type       dd 1  ;+12
  1326. .max_area   dd 100  ;+16
  1327. rb 4+4
  1328. .bckg_col   dd 0xeeeeee ;+28
  1329. .frnt_col   dd 0xbbddff ;+32
  1330. .line_col   dd 0  ;+36
  1331. rb 4+2+2
  1332. .run_x:
  1333. rb 2+2+2+2+4+4+4+4+4+4
  1334. .all_redraw dd 0 ;+80
  1335. .ar_offset  dd 1 ;+84
  1336.  
  1337.  
  1338. align 4
  1339. i_end:
  1340.         rb 1024
  1341. thread_coords:
  1342.         rb 1024
  1343. stacktop:
  1344.         sys_path rb 1024
  1345.         file_name:
  1346.                 rb 4096
  1347.         library_path rb 1024
  1348.         plugin_path rb 4096
  1349.         openfile_path rb 4096
  1350.         filename_area rb 256
  1351. mem:
  1352.