Subversion Repositories Kolibri OS

Rev

Rev 2915 | 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 '../../../../programs/macros.inc'
  13. include '../../../../programs/proc32.inc'
  14. include '../../../../programs/develop/libraries/box_lib/load_lib.mac'
  15. include '../trunk/mem.inc'
  16. include '../trunk/dll.inc'
  17.  
  18. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  19. caption db 'Voxel creator 1.08.12',0 ;¯®¤¯¨áì ®ª­ 
  20.  
  21. struct FileInfoBlock
  22.         Function dd ?
  23.         Position dd ?
  24.         Flags    dd ?
  25.         Count    dd ?
  26.         Buffer   dd ?
  27.                 db ?
  28.         FileName dd ?
  29. ends
  30.  
  31. BUF_STRUCT_SIZE equ 21
  32. buf2d_data equ dword[edi] ;¤ ­­ë¥ ¡ãä¥à  ¨§®¡à ¦¥­¨ï
  33. buf2d_w equ dword[edi+8] ;è¨à¨­  ¡ãä¥à 
  34. buf2d_h equ dword[edi+12] ;¢ëá®â  ¡ãä¥à 
  35. buf2d_l equ word[edi+4]
  36. buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã
  37. buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢  ¨ á¯à ¢  ¤«ï ¡ãä¥à 
  38. buf2d_color equ dword[edi+16] ;梥â ä®­  ¡ãä¥à 
  39. buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥­¨ï
  40.  
  41. vox_offs_tree_table equ 4
  42. vox_offs_data equ 12
  43.  
  44. run_file_70 FileInfoBlock
  45. image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
  46. vox_obj_size dd 0 ;à §¬¥à ¢®ªá¥«ì­®£® ®¡ê¥ªâ  (¤«ï ã᪮७¨ï ¢áâ ¢ª¨)
  47.  
  48. fn_toolbar db 'toolbar.png',0
  49. IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
  50. IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*9
  51. image_data_toolbar dd 0
  52.  
  53. max_open_file_size equ 1024*1024 ;1 Mb
  54.  
  55. macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
  56.         ;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
  57.         if path eqtype '' ;¯à®¢¥à塞 § ¤ ­ «¨ áâப®© ¯ à ¬¥âà path
  58.                 jmp @f
  59.                         local .path_str
  60.                         .path_str db path ;ä®à¬¨à㥬 «®ª «ì­ãî ¯¥à¥¬¥­­ãî
  61.                         db 0
  62.                 @@:
  63.                 ;32 - áâ ­¤ àâ­ë©  ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥­ ¡ëâì ¡ãä¥à á á¨á⥬­ë¬ ¯ã⥬
  64.                 copy_path .path_str,[32],file_name,0x0
  65.         else
  66.                 copy_path path,[32],file_name,0x0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
  67.         end if
  68.  
  69.         stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
  70.         mov [buf],eax
  71.  
  72.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  73.         mov [run_file_70.Function], 0
  74.         mov [run_file_70.Position], 0
  75.         mov [run_file_70.Flags], 0
  76.         mov [run_file_70.Count], dword size
  77.         m2m [run_file_70.Buffer], [buf]
  78.         mov byte[run_file_70+20], 0
  79.         mov [run_file_70.FileName], file_name
  80.         mov ebx,run_file_70
  81.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  82.         cmp ebx,0xffffffff
  83.         je @f
  84.                 ;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
  85.                 stdcall dword[img_decode], dword[buf],ebx,0
  86.                 mov dword[image_data],eax
  87.                 ;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
  88.                 stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
  89.                 ;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à image_data
  90.                 stdcall dword[img_destroy], dword[image_data]
  91.         @@:
  92. }
  93.  
  94.  
  95.  
  96. align 4
  97. start:
  98.         load_libraries l_libs_start,l_libs_end
  99.         ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ¡¨¡«¨®â¥ª 
  100.         mov     ebp,lib_0
  101.         cmp     dword [ebp+ll_struc_size-4],0
  102.         jz      @f
  103.                 mcall -1 ;exit not correct
  104.         @@:
  105.         mcall 48,3,sc,sizeof.system_colors
  106.         mcall 40,0x27
  107.         stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª  ¤¨ «®£ 
  108.  
  109.         stdcall [buf2d_create], buf_0 ;ᮧ¤ ­¨¥ ¡ãä¥à 
  110.         stdcall [buf2d_create], buf_0z
  111.         stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z
  112.  
  113.         load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE
  114.  
  115.         stdcall mem.Alloc,max_open_file_size
  116.         mov dword[open_file_vox],eax
  117.         stdcall mem.Alloc,max_open_file_size
  118.         mov dword[open_file_img],eax
  119.  
  120.         mcall 26,9
  121.         mov [last_time],eax
  122.  
  123. align 4
  124. red_win:
  125.         call draw_window
  126.  
  127. align 4
  128. still:
  129.         mcall 26,9
  130.         mov ebx,[last_time]
  131.         add ebx,10 ;§ ¤¥à¦ª 
  132.         cmp ebx,eax
  133.         jge @f
  134.                 mov ebx,eax
  135.         @@:
  136.         sub ebx,eax
  137.         ;cmp ebx,10 ;§ ¤¥à¦ª 
  138.         ;ja timer_funct
  139.         ;test ebx,ebx
  140.         ;jz timer_funct
  141.         mcall 23
  142.         cmp eax,0
  143.         je timer_funct
  144.  
  145.         cmp al,1
  146.         jz red_win
  147.         cmp al,2
  148.         jz key
  149.         cmp al,3
  150.         jz button
  151.  
  152.         jmp still
  153.  
  154. align 4
  155. timer_funct:
  156.         cmp byte[calc],0
  157.         je still
  158.  
  159.         pushad
  160.         mcall 26,9
  161.         mov [last_time],eax
  162.  
  163.         ; ᪨¤ë¢ ¥¬ 㪠§ â¥«¨ ¡ãä¥à®¢ buf_npl_p, buf_npl, buf_npl_n
  164.         mov edi,buf_npl_p
  165.         mov eax,buf2d_data
  166.         mov edi,buf_npl
  167.         mov ebx,buf2d_data
  168.         mov edi,buf_npl_n
  169.         mov ecx,buf2d_data
  170.         ; change buffer data pointers
  171.         mov buf2d_data,eax
  172.         mov edi,buf_npl_p
  173.         mov buf2d_data,ebx
  174.         mov edi,buf_npl
  175.         mov buf2d_data,ecx
  176.  
  177.         mov eax,[n_plane]
  178.         mov ebx,buf2d_w
  179.         dec ebx
  180.  
  181.         cmp ebx,eax
  182.         jg @f
  183.                 stdcall create_obj_from_plane,buf_npl,eax ;ᮧ¤ ¥¬ § ¢¥àè î饥 á¥ç¥­¨¥
  184.                 ;¢ë¢®¤ ª®­¥ç­®£® १ã«ìâ â 
  185.                 call draw_object
  186.                 mov byte[calc],0
  187.                 jmp .end_f
  188.         @@:
  189.  
  190.         inc eax
  191.         stdcall create_plane, buf_npl_n,eax
  192.  
  193.         ; ᮧ¤ ­¨¥ ¢®áª¥«ì­®£® á¥ç¥­¨ï ­  ®á­®¢¥ ¡ãä¥à  buf_npl
  194.         mov edi,buf_npl
  195.         mov edx,[bby_min] ;0
  196.         .cycle_0:
  197.         mov ecx,[btx_min] ;0
  198.         .cycle_1:
  199.                 stdcall [buf2d_get_pixel], edi,ecx,edx
  200.                 cmp eax,buf2d_color
  201.                 je @f
  202.                         mov esi,eax
  203.                         call need_node
  204.                         cmp eax,buf2d_color
  205.                         jne @f ;®âᥨ¢ ¥¬ ¢­ãâ७­¨¥ ¢®ªá¥«¨, ¤«ï ®¯â¨¬¨§ æ¨¨ ¬®¤¥«¨
  206.                         mov eax,ebx
  207.                         sub eax,edx
  208.                         stdcall buf2d_vox_obj_create_node, [open_file_vox],ecx,[n_plane],\
  209.                                 eax,[k_scale],esi
  210.                 @@:
  211.                 inc ecx
  212.                 cmp ecx,ebx
  213.                 jle .cycle_1
  214.                 inc edx
  215.                 cmp edx,ebx
  216.                 jle .cycle_0
  217.  
  218.         stdcall [buf2d_draw], buf_npl
  219.         inc dword[n_plane] ;¯¥à¥¬¥é ¥¬ ¯«®áª®áâì á¥ç¥­¨ï
  220.         .end_f:
  221.         popad
  222.         jmp still
  223.  
  224. align 4
  225. proc create_plane, buf_img:dword, n_plane:dword
  226.         pushad
  227.         ; ª®¯¨à㥬 «¨æ¥¢®¥ ¨§®¡à ¦¥­¨¥ ¢ ¡ãä¥à buf_img
  228.         ; bby_min - ¨á¯®«ì§ã¥¬ ¤«ï ®¯â¨¬¨§ æ¨¨ (¥á«¨ ᢥàåã ¨§®¡à ¦¥­¨¥ ¯ãá⮥)
  229.         mov eax,[bby_min]
  230.         mov esi,buf_i2
  231.         mov esi,[esi] ;buf2d_data
  232.         mov edi,[buf_img]
  233.         mov ecx,buf2d_w
  234.         imul eax,ecx
  235.         mov ebx,ecx
  236.         imul ecx,ebx
  237.         sub ecx,eax
  238.         lea ecx,[ecx+ecx*2]
  239.         mov edi,buf2d_data
  240.         lea eax,[eax+eax*2]
  241.         add edi,eax
  242.         add esi,eax
  243.         cld
  244.         rep movsb
  245.  
  246.         mov ecx,ebx
  247.         dec ebx
  248.         mov edi,buf_i0
  249.         .cycle_0:
  250.                 mov eax,ebx
  251.                 sub eax,[n_plane] ;eax - ¯¥à¥¢¥à­ãâ ï ª®®à¤¨­ â  n_plane
  252.                 stdcall [buf2d_get_pixel], edi,ecx,eax ;[n_plane]
  253.                 cmp eax,buf2d_color
  254.                 jne @f
  255.                         ;¢ëç¥àª¨¢ ­¨¥ ¢¥à⨪ «ì­®© «¨­¨¨ ¨§ á¥ç¥­¨ï buf_img
  256.                         stdcall [buf2d_line], [buf_img],ecx,[bby_min],ecx,ebx, buf2d_color
  257.                         jmp .end_1
  258.                 @@:
  259.                         mov edx,[bby_min] ;xor edx,edx
  260.                         mov esi,eax
  261.                         .cycle_1: ;横« ¤«ï ­ «®¦¥­¨ï ¢¥àå­¥© ⥪áâãàë
  262.                         stdcall [buf2d_get_pixel], [buf_img],ecx,edx
  263.                         cmp eax, buf2d_color
  264.                         je .end_0
  265.                                 stdcall [buf2d_set_pixel], [buf_img],ecx,edx, esi ;­ «®¦¥­¨¥ ¢¥àå­¥© ⥪áâãàë
  266.                                 jmp .end_1
  267.                         .end_0:
  268.                         inc edx
  269.                         cmp edx,ebx
  270.                         jle .cycle_1
  271.                 .end_1:
  272.                 loop .cycle_0
  273.  
  274.         ;£®à¨§®­â «ì­ë¥ «¨­¨¨ ­  ®á­®¢¥ ¡®ª®¢®© £à ­¨
  275.         mov ecx,[bby_min]
  276.         mov edi,buf_i1
  277.         .cycle_2:
  278.                 stdcall [buf2d_get_pixel], edi,[n_plane],ecx
  279.                 cmp eax,buf2d_color
  280.                 jne @f
  281.                         ;¢ëç¥àª¨¢ ­¨¥ £®à¨§®­â «ì­®© «¨­¨¨ ¨§ á¥ç¥­¨ï buf_img
  282.                         stdcall [buf2d_line], [buf_img],[btx_min],ecx,[btx_max],ecx, buf2d_color
  283.                         jmp .end_3
  284.                 @@:
  285.                         mov edx,[btx_max] ;ebx
  286.                         mov esi,eax
  287.                         .cycle_3: ;横« ¤«ï ­ «®¦¥­¨ï ¡®ª®¢®© ⥪áâãàë
  288.                         stdcall [buf2d_get_pixel], [buf_img],edx,ecx
  289.                         cmp eax, buf2d_color
  290.                         je .end_2
  291.                                 stdcall [buf2d_set_pixel], [buf_img],edx,ecx, esi ;­ «®¦¥­¨¥ ¡®ª®¢®© ⥪áâãàë
  292.                                 jmp .end_3
  293.                         .end_2:
  294.                         dec edx
  295.                         cmp edx,[btx_min]
  296.                         jge .cycle_3
  297.                 .end_3:
  298.                 inc ecx
  299.                 cmp ecx,ebx
  300.                 jle .cycle_2
  301.         popad
  302.         ret
  303. endp
  304.  
  305. align 4
  306. proc create_obj_from_plane, buf_img:dword, n_plane:dword
  307. pushad
  308.         ; ᮧ¤ ­¨¥ ¢®áª¥«ì­®£® á¥ç¥­¨ï ­  ®á­®¢¥ ¡ãä¥à  buf_img
  309.         mov edi,[buf_img]
  310.         mov ebx,buf2d_w
  311.         dec ebx
  312.         mov edx,[bby_min] ;0
  313.         .cycle_0:
  314.         mov ecx,[btx_min] ;0
  315.         .cycle_1:
  316.                 stdcall [buf2d_get_pixel], edi,ecx,edx
  317.                 cmp eax,buf2d_color
  318.                 je @f
  319.                         mov esi,eax
  320.                         ;call need_node
  321.                         ;cmp eax,buf2d_color
  322.                         ;jne @f ;®âᥨ¢ ¥¬ ¢­ãâ७­¨¥ ¢®ªá¥«¨, ¤«ï ®¯â¨¬¨§ æ¨¨ ¬®¤¥«¨
  323.                         mov eax,ebx
  324.                         sub eax,edx
  325.                         stdcall buf2d_vox_obj_create_node, [open_file_vox],ecx,[n_plane],\
  326.                                 eax,[k_scale],esi
  327.                 @@:
  328.                 inc ecx
  329.                 cmp ecx,ebx
  330.                 jle .cycle_1
  331.                 inc edx
  332.                 cmp edx,ebx
  333.                 jle .cycle_0
  334.         ret
  335. popad
  336. endp
  337.  
  338. ;description:
  339. ; äã­ªæ¨ï ¯à®¢¥àï¥â ­ã¦­® «¨ ®âᥨ¢ âì ¢®ªá¥«ì á ª®®à¤¨­ â ¬¨ [n_plane],ecx,edx
  340. ;input:
  341. ; ebx = max size y - 1
  342. ;output:
  343. ; eax = buf2d_color if node need
  344. align 4
  345. need_node:
  346.         mov eax,buf2d_color
  347.         cmp ecx,[btx_min] ;0
  348.         jle .end_f
  349.         cmp ecx,[btx_max] ;0
  350.         jge .end_f
  351.         cmp edx,[bby_min] ;0
  352.         jle .end_f
  353.         cmp edx,ebx ;max-1
  354.         jge .end_f
  355.                 push ecx edx
  356.                 stdcall [buf2d_get_pixel], buf_npl_p,ecx,edx ;¯à®¢¥àª  ¯à¥¤ë¤ã饣® á¥ç¥­¨ï
  357.                 cmp eax,buf2d_color
  358.                 je @f
  359.                 stdcall [buf2d_get_pixel], buf_npl_n,ecx,edx ;¯à®¢¥àª  ¯®á«¥¤ãî饣® á¥ç¥­¨ï
  360.                 cmp eax,buf2d_color
  361.                 je @f
  362.                 dec ecx
  363.                 stdcall [buf2d_get_pixel], edi,ecx,edx
  364.                 cmp eax,buf2d_color
  365.                 je @f
  366.                 add ecx,2
  367.                 stdcall [buf2d_get_pixel], edi,ecx,edx
  368.                 cmp eax,buf2d_color
  369.                 je @f
  370.                 dec ecx
  371.                 dec edx
  372.                 stdcall [buf2d_get_pixel], edi,ecx,edx
  373.                 cmp eax,buf2d_color
  374.                 je @f
  375.                 add edx,2
  376.                 stdcall [buf2d_get_pixel], edi,ecx,edx
  377.                 ;cmp eax,buf2d_color
  378.                 ;je @f
  379.                 @@:
  380.                 pop edx ecx
  381.         .end_f:
  382.         ret
  383.  
  384. ;
  385. ;x0y0 - x1y0
  386. ;x1y0 - x1y1
  387. ;x0y1 - x0y0
  388. ;x1y1 - x0y1
  389. align 4
  390. proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
  391.         mov ebx,[v_obj]
  392.         add ebx,vox_offs_tree_table
  393.         mov ecx,2
  394.         cld
  395.         @@:
  396.                 mov eax,dword[ebx]
  397.                 mov byte[ebx+1],al
  398.                 mov byte[ebx+3],ah
  399.                 shr eax,16
  400.                 mov byte[ebx],al
  401.                 mov byte[ebx+2],ah
  402.                 add ebx,4
  403.                 loop @b
  404.         ret
  405. endp
  406.  
  407. align 4
  408. draw_window:
  409. pushad
  410.         mcall 12,1
  411.  
  412.         ; *** à¨á®¢ ­¨¥ £« ¢­®£® ®ª­  (¢ë¯®«­ï¥âáï 1 à § ¯à¨ § ¯ã᪥) ***
  413.         xor eax,eax
  414.         mov ebx,(20 shl 16)+410
  415.         mov ecx,(20 shl 16)+520
  416.         mov edx,[sc.work]
  417.         or  edx,(3 shl 24)+0x30000000
  418.         mov edi,caption
  419.         int 0x40
  420.  
  421.         ; *** ᮧ¤ ­¨¥ ª­®¯®ª ­  ¯ ­¥«ì ***
  422.         mov eax,8
  423.         mov ebx,(5 shl 16)+20
  424.         mov ecx,(5 shl 16)+20
  425.         mov edx,3
  426.         mov esi,[sc.work_button]
  427.         int 0x40
  428.  
  429.         mov ebx,(30 shl 16)+20
  430.         mov edx,4
  431.         int 0x40
  432.  
  433.         mov ebx,(55 shl 16)+20
  434.         mov edx,5
  435.         int 0x40
  436.  
  437.         mov ebx,(85 shl 16)+20
  438.         mov edx,6
  439.         int 0x40
  440.  
  441.         add ebx,25 shl 16
  442.         mov edx,7
  443.         int 0x40
  444.  
  445.         add ebx,25 shl 16
  446.         mov edx,8
  447.         int 0x40
  448.  
  449.         add ebx,25 shl 16
  450.         mov edx,9
  451.         int 0x40
  452.  
  453.         add ebx,25 shl 16
  454.         mov edx,10
  455.         int 0x40
  456.  
  457.         add ebx,25 shl 16
  458.         mov edx,11
  459.         int 0x40
  460.  
  461.         add ebx,25 shl 16
  462.         mov edx,12
  463.         int 0x40
  464.  
  465.         ; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
  466.         mov eax,7
  467.         mov ebx,[image_data_toolbar]
  468.         mov ecx,(16 shl 16)+16
  469.         mov edx,(7 shl 16)+7 ;icon new
  470.         int 0x40
  471.  
  472.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  473.         add edx,(25 shl 16) ;icon open
  474.         int 0x40
  475.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  476.         add edx,(25 shl 16) ;icon save
  477.         int 0x40
  478.  
  479.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  480.         add edx,(30 shl 16) ;
  481.         int 0x40
  482.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  483.         add edx,(25 shl 16) ;
  484.         int 0x40
  485.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  486.         add edx,(25 shl 16) ;
  487.         int 0x40
  488.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  489.         add edx,(25 shl 16) ;
  490.         int 0x40
  491.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  492.         add edx,(25 shl 16) ;
  493.         int 0x40
  494.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  495.         add edx,(25 shl 16) ;
  496.         int 0x40
  497.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  498.         add edx,(25 shl 16) ;
  499.         int 0x40
  500.  
  501.         call draw_buffers
  502.  
  503.         mcall 12,2
  504. popad
  505.         ret
  506.  
  507. align 4
  508. draw_buffers:
  509.         ; *** à¨á®¢ ­¨¥ ¡ãä¥à  ***
  510.         stdcall [buf2d_draw], buf_0
  511.         stdcall [buf2d_draw], buf_i0
  512.         stdcall [buf2d_draw], buf_i1
  513.         stdcall [buf2d_draw], buf_i2
  514.         ret
  515.  
  516. align 4
  517. key:
  518.         mcall 2
  519.         jmp still
  520.  
  521.  
  522. align 4
  523. button:
  524.         mcall 17
  525.         cmp ah,3
  526.         jne @f
  527.                 call but_new_file
  528.         @@:
  529.         cmp ah,4
  530.         jne @f
  531.                 call but_open_file
  532.         @@:
  533.         cmp ah,5
  534.         jne @f
  535.                 call but_save_file
  536.         @@:
  537.         cmp ah,6
  538.         jne @f
  539.                 call but_1
  540.         @@:
  541.         cmp ah,7
  542.         jne @f
  543.                 call but_2
  544.         @@:
  545.         cmp ah,8
  546.         jne @f
  547.                 call but_3
  548.         @@:
  549.         cmp ah,9
  550.         jne @f
  551.                 stdcall but_run, 0
  552.         @@:
  553.         cmp ah,10
  554.         jne @f
  555.                 stdcall but_run, 1
  556.         @@:
  557.         cmp ah,11
  558.         jne @f
  559.                 call but_5
  560.         @@:
  561.         cmp ah,12
  562.         jne @f
  563.                 call but_rot_z
  564.         @@:
  565.         cmp ah,1
  566.         jne still
  567. .exit:
  568.         stdcall [buf2d_delete],buf_0
  569.         stdcall [buf2d_delete],buf_0z
  570.         stdcall [buf2d_vox_brush_delete],buf_vox
  571.         stdcall [buf2d_delete],buf_i0
  572.         stdcall [buf2d_delete],buf_i1
  573.         stdcall [buf2d_delete],buf_i2
  574.         stdcall [buf2d_delete],buf_npl_p
  575.         stdcall [buf2d_delete],buf_npl
  576.         stdcall [buf2d_delete],buf_npl_n
  577.         stdcall mem.Free,[image_data_toolbar]
  578.         stdcall mem.Free,[open_file_vox]
  579.         stdcall mem.Free,[open_file_img]
  580.         mcall -1
  581.  
  582.  
  583. align 4
  584. vox_new_data:
  585.         db 2,0,0,0
  586.         db 000b,001b,010b,011b, 100b,101b,110b,111b ;default table
  587.         dd 0 ;null node
  588.  
  589. align 4
  590. proc but_new_file uses ecx edi esi
  591.         mov ecx,vox_offs_data+4
  592.         mov [vox_obj_size],ecx
  593.         mov esi,vox_new_data
  594.         mov edi,[open_file_vox]
  595.         cld
  596.         rep movsb
  597.         ret
  598. endp
  599.  
  600. align 4
  601. open_file_vox dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ä ©«®¢
  602. open_file_img dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ⥪áâãà
  603.  
  604. align 4
  605. but_open_file:
  606.         pushad
  607.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  608.         mov [OpenDialog_data.type],0
  609.         stdcall [OpenDialog_Start],OpenDialog_data
  610.         cmp [OpenDialog_data.status],2
  611.         je .end_open_file
  612.         ;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
  613.  
  614.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  615.         mov [run_file_70.Function], 0
  616.         mov [run_file_70.Position], 0
  617.         mov [run_file_70.Flags], 0
  618.         mov [run_file_70.Count], dword max_open_file_size
  619.         m2m [run_file_70.Buffer],dword[open_file_vox]
  620.         mov byte[run_file_70+20], 0
  621.         mov dword[run_file_70.FileName], openfile_path
  622.         mov ebx,run_file_70
  623.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  624.         cmp ebx,0xffffffff
  625.         je .end_open_file
  626.                 ; ¯à®¢¥àª  ­  ¯à ¢¨«ì­®áâì ¢®ªá¥«ì­®£® ä®à¬ â 
  627.                 mov edi,[open_file_vox]
  628.                 add edi,vox_offs_tree_table
  629.                 xor bx,bx
  630.                 mov ecx,8
  631.                 cld
  632.                 @@:
  633.                         movzx ax,byte[edi]
  634.                         add bx,ax
  635.                         inc edi
  636.                         loop @b
  637.                 cmp bx,28 ;28=0+1+2+...+7
  638.                 jne .err_open
  639.  
  640.                 mcall 71,1,openfile_path
  641.                 stdcall buf2d_vox_obj_get_size,[open_file_vox]
  642.                 mov [vox_obj_size],eax
  643.                 call draw_object
  644.                
  645.                 jmp .end_open_file
  646.         .err_open:
  647.                 call but_new_file
  648.                 stdcall [mb_create],msgbox_4,thread
  649.         .end_open_file:
  650.         popad
  651.         ret
  652.  
  653. align 4
  654. but_save_file:
  655.         pushad
  656.                 copy_path open_dialog_name,communication_area_default_path,file_name,0
  657.                 mov [OpenDialog_data.type],1
  658.                 stdcall [OpenDialog_Start],OpenDialog_data
  659.                 cmp [OpenDialog_data.status],2
  660.                 je .end_save_file
  661.                 ;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
  662.  
  663.                 mov eax,6 ;dword[v_zoom] ;§ ¤ ¥¬ ¬ áèâ ¡ ¯® 㬮«ç ­¨î
  664.                 mov ebx,[open_file_vox]
  665.                 mov byte[ebx],al
  666.  
  667.                 stdcall buf2d_vox_obj_get_size, ebx
  668.                 mov dword[run_file_70.Count], eax ;à §¬¥à ä ©« 
  669.                 mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  670.                 mov [run_file_70.Function], 2
  671.                 mov [run_file_70.Position], 0
  672.                 mov [run_file_70.Flags], 0
  673.                 mov ebx, dword[open_file_vox]
  674.                 mov [run_file_70.Buffer], ebx
  675.                 mov byte[run_file_70+20], 0
  676.                 mov dword[run_file_70.FileName], openfile_path
  677.                 mov ebx,run_file_70
  678.                 int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  679.                 cmp ebx,0xffffffff
  680.                 je .end_save_file
  681.  
  682.                 .end_save_file:
  683.         popad
  684.         ret
  685.  
  686. align 4
  687. but_1:
  688.         stdcall open_image_in_buf, buf_i0
  689.         ret
  690.  
  691. align 4
  692. but_2:
  693.         stdcall open_image_in_buf, buf_i1
  694.         call set_buf_tabs
  695.         ret
  696.  
  697. align 4
  698. but_3:
  699.         stdcall open_image_in_buf, buf_i2
  700.         call set_buf_tabs
  701.         ret
  702.  
  703. ;description:
  704. ; ¢ § ¢¨á¨¬®á⨠®â è¨à¨­ë 1-£® ¡ãä¥à  ãáâ ­ ¢«¨¢ ¥¬ ®âáâã¯ë ¤«ï 2-£® ¨ 3-£® ¡ãä¥à®¢
  705. align 4
  706. set_buf_tabs:
  707. push eax ebx edi
  708.         mov edi,buf_i0
  709.         cmp buf2d_data,0
  710.         je @f
  711.                 movzx eax,buf2d_l
  712.                 mov ebx,buf2d_w
  713.                 cmp ebx,128
  714.                 jle .end_0
  715.                         mov ebx,128
  716.                 .end_0:
  717.                 mov edi,buf_i1
  718.                 mov buf2d_l,ax
  719.                 add buf2d_l,bx
  720.                 add buf2d_l,2
  721.                 shl ebx,1
  722.                 mov edi,buf_i2
  723.                 mov buf2d_l,ax
  724.                 add buf2d_l,bx
  725.                 add buf2d_l,4
  726.         @@:    
  727. pop edi ebx eax
  728.         ret
  729.  
  730. align 4
  731. get_scale:
  732. push eax edi
  733.         mov edi,buf_i0
  734.         mov eax,buf2d_w
  735.  
  736.         mov dword[k_scale],-1
  737.         .cycle_s:
  738.         cmp eax,0
  739.         je @f
  740.                 shr eax,1
  741.                 inc dword[k_scale]
  742.                 jmp .cycle_s
  743.         @@:
  744. pop edi eax
  745.         ret
  746.  
  747. align 4
  748. proc set_borders uses eax ebx ecx edx edi
  749.         mov ecx,dword[k_scale]
  750.         mov edx,1
  751.         shl edx,cl
  752.  
  753.         ;®¯à¥¤¥«ï¥¬ ¬¨­¨¬ «ì­ãî ª®®à¤¨­ âã y ­  «¨æ¥¢®© £à ­¨
  754.         mov edi,buf_i2
  755.         mov dword[bby_min],0
  756.         xor ecx,ecx
  757.         .cycle_0:
  758.         xor ebx,ebx
  759.         .cycle_1:
  760.                 stdcall [buf2d_get_pixel],edi,ebx,ecx
  761.                 cmp eax,buf2d_color
  762.                 jne @f
  763.                 inc ebx
  764.                 cmp ebx,edx
  765.                 jl .cycle_1
  766.                 inc dword[bby_min]
  767.                 inc ecx
  768.                 cmp ecx,edx
  769.                 jl .cycle_0
  770.         @@:
  771.  
  772.         ;®¯à¥¤¥«ï¥¬ ¬¨­¨¬ «ì­ãî ª®®à¤¨­ âã x ­  «¨æ¥¢®© £à ­¨
  773.         mov dword[btx_min],0
  774.         xor ebx,ebx
  775.         .cycle_2:
  776.         mov ecx,[bby_min]
  777.         .cycle_3:
  778.                 stdcall [buf2d_get_pixel],edi,ebx,ecx
  779.                 cmp eax,buf2d_color
  780.                 jne @f
  781.                 inc ecx
  782.                 cmp ecx,edx
  783.                 jl .cycle_3
  784.                 inc dword[btx_min]
  785.                 inc ebx
  786.                 cmp ebx,edx
  787.                 jl .cycle_2
  788.         @@:
  789.  
  790.         ;®¯à¥¤¥«ï¥¬ ¬ ªá¨¬ «ì­ãî ª®®à¤¨­ âã x ­  «¨æ¥¢®© £à ­¨
  791.         mov [btx_max],edx
  792.         dec dword[btx_max]
  793.         mov ebx,[btx_max]
  794.         .cycle_4:
  795.         mov ecx,[bby_min]
  796.         .cycle_5:
  797.                 stdcall [buf2d_get_pixel],edi,ebx,ecx
  798.                 cmp eax,buf2d_color
  799.                 jne @f
  800.                 inc ecx
  801.                 cmp ecx,edx
  802.                 jl .cycle_5
  803.                 dec dword[btx_max]
  804.                 dec ebx
  805.                 cmp ebx,[btx_min]
  806.                 jg .cycle_4
  807.         @@:
  808.        
  809.         ;stdcall [buf2d_line], edi, 0,[bby_min],50,[bby_min],255
  810.         ret
  811. endp
  812.  
  813. align 4
  814. btx_min dd 0 ;¡ãä¥à ¢¥àå­¨© ¬¨­. x
  815. btx_max dd 0
  816. bty_min dd 0 ;¡ãä¥à ¢¥àå­¨© ¬¨­. y
  817. bty_max dd 0
  818. ;bbx_min dd 0
  819. ;bbx_max dd 0
  820. bby_min dd 0 ;¡ãä¥à ¡®ª®¢®© ¬¨­. y
  821. bby_max dd 0
  822. k_scale dd 0
  823. n_plane dd 0
  824.  
  825. calc db 0
  826.  
  827. ; ᮧ¤ ­¨¥ ¢®ªá¥«ï ¢ 3 íâ ¯ :
  828. ; 1) ¨é¥¬ ¬¥áâ® ¢ áâàãªâãॠ¤¥à¥¢ , ªã¤  ­ ¤® ¢áâ ¢¨âì (¥á«¨ ¢¥â¢ì áãé¥áâ¢ã¥â, 2-© íâ ¯ ¯à®¯ã᪠¥¬)
  829. ; 2) ¢áâ ¢«ï¥¬ ­®¢ãî ¢¥â¢ì á ¢®ªá¥«¥¬ (3-© íâ ¯ 㦥 ­¥ ¤¥« ¥¬)
  830. ; 3) ¬¥­ï¥¬ 梥⠢®ªá¥«ï
  831. align 4
  832. proc buf2d_vox_obj_create_node, v_obj:dword,coord_x:dword,coord_y:dword,\
  833. coord_z:dword,k_scale:dword,color:dword
  834. pushad
  835. locals
  836.         p_node dd 0 ;த¨â¥«ì᪨© 㧥«
  837. endl
  838.  
  839.         mov edi,[v_obj]
  840.         add edi,vox_offs_data
  841.         mov esi,[k_scale]
  842.         cmp esi,1
  843.         jl .change
  844.         ; *** (1) ***
  845.         .found:
  846.         stdcall vox_obj_get_node_position, [v_obj],[coord_x],[coord_y],[coord_z],esi
  847.         movzx bx,byte[edi+3]
  848.         mov [p_node],edi
  849.         add edi,4
  850.  
  851.         cmp eax,0
  852.         je .end_1
  853.         mov ecx,eax
  854.         cld
  855.         @@: ;横« ¤«ï ¯à®¯ã᪠ ¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥
  856.                 bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à­¨¥ 㧫ë
  857.                 jnc .end_0
  858.                         xor eax,eax
  859.                         stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à­¨å 㧫®¢, ¢ ¤ ­­®© ¢¥â¢¨
  860.                 .end_0:
  861.                 shr bx,1
  862.                 loop @b
  863.         .end_1:
  864.         bt bx,0
  865.         jnc .creat ;¥á«¨ ¯®¤¤¥à¥¢  ­¥ áãé¥áâ¢ã¥â, ¯¥à¥å®¤¨¬ ª ᮧ¤ ­¨î
  866.         dec esi
  867.         cmp esi,0
  868.         jg .found
  869.         jmp .change
  870.  
  871.         ; *** (2) ***
  872.         .creat:
  873.         mov edx,[color] ;¬¥­ï¥¬ 梥â
  874.         and edx,0xffffff ;¤«ï ¯à®ä¨« ªâ¨ª¨
  875.         mov ecx,esi
  876.         stdcall vox_obj_add_nodes_mem, [v_obj],edi,ecx ;à áè¨à塞 ¬¥áâ® § ­¨¬ ¥¬®¥ ®¡ê¥ªâ®¬, ¤«ï ¤®¡ ¢«¥­¨ï ­®¢ëå 㧫®¢
  877.         mov ebx,[p_node]
  878.         cld
  879.         @@:
  880.                 mov dword[edi],edx
  881.                 stdcall vox_obj_get_node_bit_mask, [v_obj],[coord_x],[coord_y],[coord_z],esi
  882.                 or byte[ebx+3],al
  883.  
  884.                 mov ebx,edi
  885.                 add edi,4
  886.                 dec esi
  887.                 loop @b
  888.         jmp .end_2
  889.  
  890.         ; *** (3) ***
  891.         .change:
  892.         mov eax,[color] ;¬¥­ï¥¬ 梥â
  893.         mov word[edi],ax
  894.         shr eax,16
  895.         mov byte[edi+2],al
  896.  
  897.         .end_2:
  898. popad
  899.         ret
  900. endp
  901.  
  902. ; ᤢ¨£ ¥â ã§«ë ¤«ï ¤®¡ ¢«¥­¨ï ­®¢ëå 㧫®¢
  903. ;input:
  904. ; p_insert - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨
  905. ; count - ª®««¨ç¥á⢮ ¢áâ ¢«ï¥¬ëå 㧫®¢
  906. align 4
  907. proc vox_obj_add_nodes_mem uses eax ecx edi esi, v_obj:dword,p_insert:dword,count:dword
  908.         mov esi,[v_obj]
  909.         ;stdcall buf2d_vox_obj_get_size,esi
  910.         add esi,[vox_obj_size] ;esi - 㪠§ â¥«ì ­  ª®­¥æ ä ©« 
  911.         mov edi,[count]
  912.         shl edi,2
  913.         add [vox_obj_size],edi
  914.         add edi,esi ;edi - 㪠§ â¥«ì ­  ¡ã¤ã騩 ª®­¥æ ä ©« 
  915.         mov ecx,esi
  916.         sub ecx,[p_insert]
  917.         shr ecx,2 ;ecx - ç¨á«® 横«®¢ ¤«ï ª®¯¨à®¢ ­¨ï
  918.         sub esi,4 ;esi - 㪠§ â¥«ì ­  ¯®á«¥¤­¨© 㧥«
  919.         sub edi,4 ;edi - 㪠§ â¥«ì ­  ¡ã¤ã騩 ¯®á«¥¤­¨© 㧥«
  920.         std
  921.         rep movsd ;ᤢ¨£ ¥¬ ¯ ¬ïâì
  922.         ret
  923. endp
  924.  
  925. ;???
  926. ; ®¯à¥¤¥«¥­¨¥ ¯®§¨æ¨¨ 㧫  ¢ ¤¥à¥¢¥ (®â 0 ¤® 7)
  927. align 4
  928. proc vox_obj_get_node_position uses ebx ecx edi, v_obj:dword,\
  929. coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword
  930.         mov ecx,[k_scale]
  931.         dec ecx
  932.         mov eax,[coord_x]
  933.         mov ebx,[coord_y]
  934.         mov edi,[coord_z]
  935.         cmp ecx,1
  936.         jl .end_0
  937.                 shr eax,cl
  938.                 shr ebx,cl
  939.                 shr edi,cl
  940.         .end_0:
  941.         and eax,1
  942.         bt ebx,0
  943.         jnc @f
  944.                 bts eax,1
  945.         @@:
  946.         bt edi,0
  947.         jnc @f
  948.                 bts eax,2
  949.         @@:
  950.  
  951.         mov edi,[v_obj]
  952.         add edi,vox_offs_tree_table
  953.         @@:
  954.                 cmp al,byte[edi]
  955.                 je @f
  956.                 inc edi
  957.                 jmp @b
  958.         @@:
  959.         sub edi,[v_obj]
  960.         sub edi,vox_offs_tree_table
  961.         mov eax,edi
  962.        
  963.         ret
  964. endp
  965.  
  966. ;???
  967. ;input:
  968. ; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
  969. ;output:
  970. ; eax - eax + ç¨á«® 㧫®¢ ¢ ¤ ­­ëå ¢®ªá. ®¡ê¥ªâ 
  971. ; edi - 㪠§ â¥«ì ­  ᬥ饭­ë¥ ¤ ­­ë¥ ¢®ªá. ®¡ê¥ªâ 
  972. align 4
  973. proc vox_obj_rec0
  974.         inc eax
  975.         cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
  976.         je .sub_trees
  977.  
  978.                 ;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
  979.                 push ebx ecx
  980.                 mov bh,byte[edi+3]
  981.                 add edi,4
  982.                 mov bl,8
  983.                 .cycle:
  984.                         bt bx,8 ;â¥áâ¨à㥬 ⮫쪮 bh
  985.                         jnc .c_next
  986.                                 stdcall vox_obj_rec0
  987.                         .c_next:
  988.                         shr bh,1
  989.                         dec bl
  990.                         jnz .cycle
  991.                 pop ecx ebx
  992.  
  993.                 jmp .end_f
  994.         .sub_trees:
  995.                 add edi,4
  996.         .end_f:
  997.         ret
  998. endp
  999.  
  1000. ;output:
  1001. ; eax - 1,2,4,8,16, ... ,128
  1002. align 4
  1003. proc vox_obj_get_node_bit_mask uses ebx ecx edi, v_obj:dword,\
  1004. coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword
  1005.         mov ecx,[k_scale]
  1006.         dec ecx
  1007.         mov eax,[coord_x]
  1008.         mov ebx,[coord_y]
  1009.         mov edi,[coord_z]
  1010.         cmp ecx,1
  1011.         jl .end_0
  1012.                 shr eax,cl
  1013.                 shr ebx,cl
  1014.                 shr edi,cl
  1015.         .end_0:
  1016.         and eax,1
  1017.         bt ebx,0
  1018.         jnc @f
  1019.                 bts eax,1
  1020.         @@:
  1021.         bt edi,0
  1022.         jnc @f
  1023.                 bts eax,2
  1024.         @@:
  1025.  
  1026.         mov ecx,[v_obj]
  1027.         add ecx,vox_offs_tree_table
  1028.         @@:
  1029.                 cmp al,byte[ecx]
  1030.                 je @f
  1031.                 inc ecx
  1032.                 jmp @b
  1033.         @@:
  1034.         mov eax,1 ;ãáâ ­ ¢«¨¢ ¥¬ ¯¥à¢®­ ç «ì­®¥ §­ ç¥­¨¥ ¡¨â 
  1035.         sub ecx,[v_obj]
  1036.         sub ecx,vox_offs_tree_table
  1037.         jz @f
  1038.                 shl eax,cl ;ᤢ¨£ ¥¬ ¡¨â
  1039.         @@:
  1040.        
  1041.         ret
  1042. endp
  1043.  
  1044. ;
  1045. ;output:
  1046. ; eax - à §¬¥à ¢ ¡ ©â å § ­¨¬ ¥¬ë© ®¡ê¥ªâ®¬ v_obj
  1047. align 4
  1048. proc buf2d_vox_obj_get_size uses edi, v_obj:dword
  1049.         mov edi,[v_obj]
  1050.         add edi,vox_offs_data
  1051.         xor eax,eax
  1052.         stdcall vox_obj_rec0 ;eax - ç¨á«® 㧫®¢ ¢ ®¡ê¥ªâ¥ v_obj
  1053.         shl eax,2
  1054.         add eax,vox_offs_data
  1055.         ret
  1056. endp
  1057.  
  1058. ;input:
  1059. ; mode_add - ¥á«¨ ­¥ à ¢­® 0 ⮣¤  ᮧ¤ ­¨¥ ¢ ०¨¬¥ ¤®¡ ¢«¥­¨ï ¢®ªá¥«¥©
  1060. align 4
  1061. proc but_run uses eax ebx edi, mode_add:dword
  1062.         ; ¯à®¢¥àª  à §¬¥à®¢ ¨§®¡à ¦¥­¨© (⥪áâãà)
  1063.         mov edi,buf_i0
  1064.         mov ebx,buf2d_h
  1065.         cmp ebx,2
  1066.         jle .err_size_t
  1067.         cmp buf2d_w,ebx
  1068.         jne .err_size_t
  1069.         ;
  1070.         mov edi,buf_i1
  1071.         cmp ebx,buf2d_h
  1072.         jne .err_size_tb
  1073.         mov ebx,buf2d_h
  1074.         cmp ebx,2
  1075.         jle .err_size_b
  1076.         cmp buf2d_w,ebx
  1077.         jne .err_size_b
  1078.  
  1079.                 cmp dword[vox_obj_size],vox_offs_data
  1080.                 jl .n_file ;¥á«¨ à ­ìè¥ ­¥ ¡ë«® ®âªàëâëå ä ©«®¢
  1081.                 cmp dword[mode_add],0
  1082.                 jne @f
  1083.                 .n_file:
  1084.                         call but_new_file
  1085.                 @@:
  1086.  
  1087.                 mov edi,buf_i0
  1088.                 mov eax,buf2d_w
  1089.                 mov edi,buf_npl
  1090.                 cmp buf2d_data,0
  1091.                 jne @f
  1092.                         ; *** ᮧ¤ ¥¬ ¡ãä¥à 
  1093.                         m2m buf2d_w,eax
  1094.                         m2m buf2d_h,eax
  1095.                         stdcall [buf2d_create],edi
  1096.                         mov edi,buf_npl_p
  1097.                         m2m buf2d_w,eax
  1098.                         m2m buf2d_h,eax
  1099.                         stdcall [buf2d_create],edi
  1100.                         mov edi,buf_npl_n
  1101.                         m2m buf2d_w,eax
  1102.                         m2m buf2d_h,eax
  1103.                         stdcall [buf2d_create],edi
  1104.                         jmp .end_0
  1105.                 @@:
  1106.                         ; *** ¨§¬¥­ï¥¬ à §¬¥àë ¡ãä¥à®¢
  1107.                         stdcall [buf2d_resize], edi, eax,eax
  1108.                         mov edi,buf_npl_p
  1109.                         stdcall [buf2d_resize], edi, eax,eax
  1110.                         mov edi,buf_npl_n
  1111.                         stdcall [buf2d_resize], edi, eax,eax
  1112.                 .end_0:
  1113.                 mov dword[n_plane],1
  1114.                 mov byte[calc],1
  1115.                 call get_scale
  1116.                 call set_borders
  1117.  
  1118.                 stdcall create_plane,buf_npl,0
  1119.                 stdcall create_plane,buf_npl_n,1
  1120.                 stdcall create_obj_from_plane,buf_npl,0 ;ᮧ¤ ¥¬ ­ ç «ì­®¥ á¥ç¥­¨¥
  1121.  
  1122.                 jmp @f
  1123.         .err_size_t:
  1124.                 stdcall [mb_create],msgbox_0,thread
  1125.                 jmp @f
  1126.         .err_size_b:
  1127.                 stdcall [mb_create],msgbox_1,thread
  1128.                 jmp @f
  1129.         .err_size_tb:
  1130.                 stdcall [mb_create],msgbox_3,thread
  1131.                 ;jmp @f
  1132.         @@:
  1133.         ret
  1134. endp
  1135.  
  1136. align 4
  1137. but_5:
  1138.         cmp byte[calc],0
  1139.         je @f
  1140.                 call draw_object
  1141.                 mov byte[calc],0
  1142.         @@:
  1143.         ret
  1144.  
  1145. align 4
  1146. but_rot_z:
  1147.         stdcall vox_obj_rot_z, [open_file_vox]
  1148.         call draw_object
  1149.         ret
  1150.  
  1151. align 4
  1152. draw_object:
  1153.         ;¢ë¢®¤ १ã«ìâ â  ­  íªà ­
  1154.         stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
  1155.         stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à
  1156.         stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, buf_vox,\
  1157.                 [open_file_vox], 0,0, 0, 6 ;[k_scale]
  1158.         stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
  1159.         ret
  1160.  
  1161. align 4
  1162. proc open_image_in_buf, buf:dword
  1163.         pushad
  1164.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  1165.         mov [OpenDialog_data.type],0
  1166.         stdcall [OpenDialog_Start],OpenDialog_data
  1167.         cmp [OpenDialog_data.status],2
  1168.         je .end_open_file
  1169.  
  1170.         ;stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
  1171.         ;mov [buf],eax
  1172.  
  1173.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  1174.         mov [run_file_70.Function], 0
  1175.         mov [run_file_70.Position], 0
  1176.         mov [run_file_70.Flags], 0
  1177.         mov [run_file_70.Count], dword max_open_file_size
  1178.         m2m [run_file_70.Buffer],dword[open_file_img]
  1179.         mov byte[run_file_70+20], 0
  1180.         mov [run_file_70.FileName], openfile_path
  1181.         mov ebx,run_file_70
  1182.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  1183.         cmp ebx,0xffffffff
  1184.         je .end_0
  1185.                 ;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
  1186.                 stdcall dword[img_decode], dword[open_file_img],ebx,0
  1187.                 cmp eax,0
  1188.                 je .end_0 ;¥á«¨ ­ àã襭 ä®à¬ â ä ©« 
  1189.                 mov dword[image_data],eax
  1190.                 ;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
  1191.                 stdcall dword[img_to_rgb2], dword[image_data],dword[open_file_img]
  1192.  
  1193.                 mov eax,dword[image_data]
  1194.                 mov edi,[buf]
  1195.                 cmp buf2d_data,0
  1196.                 jne @f
  1197.                         m2m buf2d_w,dword[eax+4] ;+4 = image width
  1198.                         m2m buf2d_h,dword[eax+8] ;+8 = image heihht
  1199.                         stdcall [buf2d_create_f_img], edi,[open_file_img]
  1200.                         jmp .end_1
  1201.                 @@:
  1202.                         mov ebx,dword[eax+4]
  1203.                         mov ecx,dword[eax+8]
  1204.                         stdcall [buf2d_resize], edi, ebx,ecx ;¨§¬¥­ï¥¬ à §¬¥àë ¡ãä¥à 
  1205.                         imul ecx,ebx
  1206.                         lea ecx,[ecx+ecx*2]
  1207.                         mov edi,buf2d_data
  1208.                         mov esi,[open_file_img]
  1209.                         cld
  1210.                         rep movsb ;copy image
  1211.                 .end_1:
  1212.  
  1213.                 ;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à image_data
  1214.                 stdcall dword[img_destroy], dword[image_data]
  1215.         .end_0:
  1216.  
  1217.         call draw_buffers
  1218.         .end_open_file:
  1219.         popad
  1220.         ret
  1221. endp
  1222.  
  1223. ;input:
  1224. ; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
  1225. ;output:
  1226. ; eax - ç¨á«®
  1227. align 4
  1228. proc conv_str_to_int, buf:dword
  1229.         xor eax,eax
  1230.         push ebx ecx esi
  1231.         xor ebx,ebx
  1232.         mov esi,[buf]
  1233.         ;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
  1234.         xor ecx,ecx
  1235.         inc ecx
  1236.         cmp byte[esi],'-'
  1237.         jne @f
  1238.                 dec ecx
  1239.                 inc esi
  1240.         @@:
  1241.  
  1242.         cmp word[esi],'0x'
  1243.         je .load_digit_16
  1244.  
  1245.         .load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
  1246.                 mov bl,byte[esi]
  1247.                 cmp bl,'0'
  1248.                 jl @f
  1249.                 cmp bl,'9'
  1250.                 jg @f
  1251.                         sub bl,'0'
  1252.                         imul eax,10
  1253.                         add eax,ebx
  1254.                         inc esi
  1255.                         jmp .load_digit_10
  1256.         jmp @f
  1257.  
  1258.         .load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
  1259.                 add esi,2
  1260.         .cycle_16:
  1261.                 mov bl,byte[esi]
  1262.                 cmp bl,'0'
  1263.                 jl @f
  1264.                 cmp bl,'f'
  1265.                 jg @f
  1266.                 cmp bl,'9'
  1267.                 jle .us1
  1268.                         cmp bl,'A'
  1269.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
  1270.                 .us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
  1271.                 cmp bl,'F'
  1272.                 jle .us2
  1273.                         cmp bl,'a'
  1274.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
  1275.                         sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
  1276.                 .us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
  1277.                         sub bl,'0'
  1278.                         cmp bl,9
  1279.                         jle .cor1
  1280.                                 sub bl,7 ;convert 'A' to '10'
  1281.                         .cor1:
  1282.                         shl eax,4
  1283.                         add eax,ebx
  1284.                         inc esi
  1285.                         jmp .cycle_16
  1286.         @@:
  1287.         cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  1288.         jne @f
  1289.                 sub ecx,eax
  1290.                 mov eax,ecx
  1291.         @@:
  1292.         pop esi ecx ebx
  1293.         ret
  1294. endp
  1295.  
  1296. msgbox_0:
  1297.         db 1,0
  1298.         db '‚­¨¬ ­¨¥',0
  1299.         db ' §¬¥à ¢¥àå­¥£® ¨§®¡à ¦¥­¨ï ­¥ ª®à¥ªâ­ë©',0
  1300.         db '‡ ªàëâì',0
  1301.         db 0
  1302.  
  1303. msgbox_1:
  1304.         db 1,0
  1305.         db '‚­¨¬ ­¨¥',0
  1306.         db ' §¬¥à ¡®ª®¢®£® ¨§®¡à ¦¥­¨ï ­¥ ª®à¥ªâ­ë©',0
  1307.         db '‡ ªàëâì',0
  1308.         db 0
  1309.  
  1310. msgbox_2:
  1311.         db 1,0
  1312.         db '‚­¨¬ ­¨¥',0
  1313.         db ' §¬¥à ¯¥à¥¤­¥£® ¨§®¡à ¦¥­¨ï ­¥ ª®à¥ªâ­ë©',0
  1314.         db '‡ ªàëâì',0
  1315.         db 0
  1316.  
  1317. msgbox_3:
  1318.         db 1,0
  1319.         db '‚­¨¬ ­¨¥',0
  1320.         db ' §¬¥àë ¢¥àå­¥£® ¨ ¡®ª®¢®£® ¨§®¡à ¦¥­¨© ­¥ ᮢ¯ ¤ îâ',13,\
  1321.                 'Žâªà®©â¥ ¨§®¡à ¦¥­¨ï ®¤¨­ ª®¢ëå à §¬¥à®¢',0
  1322.         db '‡ ªàëâì',0
  1323.         db 0
  1324.  
  1325. msgbox_4:
  1326.         db 1,0
  1327.         db '‚­¨¬ ­¨¥',0
  1328.         db 'Žâªà뢠¥¬ë© ä ©« ᮤ¥à¦¨â ­¥ ¢®ªá¥«ì­ë© ä®à¬ â',0
  1329.         db '‡ ªàëâì',0
  1330.         db 0
  1331.  
  1332. ;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
  1333. align 4
  1334. OpenDialog_data:
  1335. .type                   dd 0 ;0 - ®âªàëâì, 1 - á®åà ­¨âì, 2 - ¢ë¡à âì ¤â४â®à¨î
  1336. .procinfo               dd procinfo     ;+4
  1337. .com_area_name          dd communication_area_name      ;+8
  1338. .com_area               dd 0    ;+12
  1339. .opendir_path           dd plugin_path  ;+16
  1340. .dir_default_path       dd default_dir ;+20
  1341. .start_path             dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢
  1342. .draw_window            dd draw_window  ;+28
  1343. .status                 dd 0    ;+32
  1344. .openfile_path          dd openfile_path        ;+36 ¯ãâì ª ®âªà뢠¥¬®¬ã ä ©«ã
  1345. .filename_area          dd filename_area        ;+40
  1346. .filter_area            dd Filter
  1347. .x:
  1348. .x_size                 dw 420 ;+48 ; Window X size
  1349. .x_start                dw 10 ;+50 ; Window X position
  1350. .y:
  1351. .y_size                 dw 320 ;+52 ; Window y size
  1352. .y_start                dw 10 ;+54 ; Window Y position
  1353.  
  1354. default_dir db '/rd/1',0
  1355.  
  1356. communication_area_name:
  1357.         db 'FFFFFFFF_open_dialog',0
  1358. open_dialog_name:
  1359.         db 'opendial',0
  1360. communication_area_default_path:
  1361.         db '/rd/1/File managers/',0
  1362.  
  1363. Filter:
  1364. dd Filter.end - Filter ;.1
  1365. .1:
  1366. db 'PNG',0
  1367. db 'JPG',0
  1368. db 'JPEG',0
  1369. db 'BMP',0
  1370. db 'GIF',0
  1371. db 'VOX',0
  1372. .end:
  1373. db 0
  1374.  
  1375.  
  1376.  
  1377. head_f_i:
  1378. head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
  1379.  
  1380. system_dir_0 db '/sys/lib/'
  1381. lib_name_0 db 'proc_lib.obj',0
  1382. err_message_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
  1383. err_message_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
  1384.  
  1385. system_dir_1 db '/sys/lib/'
  1386. lib_name_1 db 'libimg.obj',0
  1387. err_message_found_lib_1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'libimg.obj',39,0
  1388. err_message_import_1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libimg.obj',39,0
  1389.  
  1390. system_dir_2 db '/sys/lib/'
  1391. lib_name_2 db 'buf2d.obj',0
  1392. err_msg_found_lib_2 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'buf2d.obj',39,0
  1393. err_msg_import_2 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'buf2d',39,0
  1394.  
  1395. system_dir_3 db '/sys/lib/'
  1396. lib_name_3 db 'msgbox.obj',0
  1397. err_msg_found_lib_3 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'msgbox.obj',39,0
  1398. err_msg_import_3 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'msgbox',39,0
  1399.  
  1400. l_libs_start:
  1401.         lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
  1402.                 err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
  1403.         lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
  1404.                 err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
  1405.         lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
  1406.                 err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i
  1407.         lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\
  1408.                 err_msg_found_lib_3,head_f_l,import_msgbox_lib,err_msg_import_3,head_f_i
  1409. l_libs_end:
  1410.  
  1411. align 4
  1412. import_libimg:
  1413.         dd alib_init1
  1414.         img_is_img  dd aimg_is_img
  1415.         img_info    dd aimg_info
  1416.         img_from_file dd aimg_from_file
  1417.         img_to_file dd aimg_to_file
  1418.         img_from_rgb dd aimg_from_rgb
  1419.         img_to_rgb  dd aimg_to_rgb
  1420.         img_to_rgb2 dd aimg_to_rgb2
  1421.         img_decode  dd aimg_decode
  1422.         img_encode  dd aimg_encode
  1423.         img_create  dd aimg_create
  1424.         img_destroy dd aimg_destroy
  1425.         img_destroy_layer dd aimg_destroy_layer
  1426.         img_count   dd aimg_count
  1427.         img_lock_bits dd aimg_lock_bits
  1428.         img_unlock_bits dd aimg_unlock_bits
  1429.         img_flip    dd aimg_flip
  1430.         img_flip_layer dd aimg_flip_layer
  1431.         img_rotate  dd aimg_rotate
  1432.         img_rotate_layer dd aimg_rotate_layer
  1433.         img_draw    dd aimg_draw
  1434.  
  1435.         dd 0,0
  1436.         alib_init1   db 'lib_init',0
  1437.         aimg_is_img  db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ­­ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª  ᤥ« âì ¨§ ­¨å ¨§®¡à ¦¥­¨¥
  1438.         aimg_info    db 'img_info',0
  1439.         aimg_from_file db 'img_from_file',0
  1440.         aimg_to_file db 'img_to_file',0
  1441.         aimg_from_rgb db 'img_from_rgb',0
  1442.         aimg_to_rgb  db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¢ ¤ ­­ë¥ RGB
  1443.         aimg_to_rgb2 db 'img_to_rgb2',0
  1444.         aimg_decode  db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ­­ëå
  1445.         aimg_encode  db 'img_encode',0
  1446.         aimg_create  db 'img_create',0
  1447.         aimg_destroy db 'img_destroy',0
  1448.         aimg_destroy_layer db 'img_destroy_layer',0
  1449.         aimg_count   db 'img_count',0
  1450.         aimg_lock_bits db 'img_lock_bits',0
  1451.         aimg_unlock_bits db 'img_unlock_bits',0
  1452.         aimg_flip    db 'img_flip',0
  1453.         aimg_flip_layer db 'img_flip_layer',0
  1454.         aimg_rotate  db 'img_rotate',0
  1455.         aimg_rotate_layer db 'img_rotate_layer',0
  1456.         aimg_draw    db 'img_draw',0
  1457.  
  1458. align 4
  1459. proclib_import: ;®¯¨á ­¨¥ íªá¯®àâ¨à㥬ëå ä㭪権
  1460.         OpenDialog_Init dd aOpenDialog_Init
  1461.         OpenDialog_Start dd aOpenDialog_Start
  1462. dd 0,0
  1463.         aOpenDialog_Init db 'OpenDialog_init',0
  1464.         aOpenDialog_Start db 'OpenDialog_start',0
  1465.  
  1466. align 4
  1467. import_buf2d:
  1468.         init dd sz_init
  1469.         buf2d_create dd sz_buf2d_create
  1470.         buf2d_create_f_img dd sz_buf2d_create_f_img
  1471.         buf2d_clear dd sz_buf2d_clear
  1472.         buf2d_draw dd sz_buf2d_draw
  1473.         buf2d_delete dd sz_buf2d_delete
  1474.         buf2d_resize dd sz_buf2d_resize
  1475.         buf2d_line dd sz_buf2d_line
  1476.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  1477.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  1478.         buf2d_circle dd sz_buf2d_circle
  1479.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  1480.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  1481.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  1482.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  1483.         buf2d_bit_blt dd sz_buf2d_bit_blt
  1484.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  1485.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  1486.         buf2d_curve_bezier dd sz_buf2d_curve_bezier
  1487.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  1488.         buf2d_draw_text dd sz_buf2d_draw_text
  1489.         buf2d_crop_color dd sz_buf2d_crop_color
  1490.         buf2d_offset_h dd sz_buf2d_offset_h
  1491.         buf2d_flood_fill dd sz_buf2d_flood_fill
  1492.         buf2d_set_pixel dd sz_buf2d_set_pixel
  1493.         buf2d_get_pixel dd sz_buf2d_get_pixel
  1494.         buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
  1495.         buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
  1496.         buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
  1497.         buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
  1498.         buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
  1499.         buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
  1500.         buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
  1501.         buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
  1502.         buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
  1503.         buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
  1504.         dd 0,0
  1505.         sz_init db 'lib_init',0
  1506.         sz_buf2d_create db 'buf2d_create',0
  1507.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  1508.         sz_buf2d_clear db 'buf2d_clear',0
  1509.         sz_buf2d_draw db 'buf2d_draw',0
  1510.         sz_buf2d_delete db 'buf2d_delete',0
  1511.         sz_buf2d_resize db 'buf2d_resize',0
  1512.         sz_buf2d_line db 'buf2d_line',0
  1513.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
  1514.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  1515.         sz_buf2d_circle db 'buf2d_circle',0
  1516.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  1517.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  1518.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  1519.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  1520.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  1521.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  1522.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  1523.         sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  1524.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  1525.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  1526.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  1527.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  1528.         sz_buf2d_flood_fill db 'buf2d_flood_fill',0
  1529.         sz_buf2d_set_pixel db 'buf2d_set_pixel',0
  1530.         sz_buf2d_get_pixel db 'buf2d_get_pixel',0
  1531.         sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
  1532.         sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
  1533.         sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
  1534.         sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
  1535.         sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
  1536.         sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
  1537.         sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
  1538.         sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
  1539.         sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
  1540.         sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
  1541.  
  1542. align 4
  1543. import_msgbox_lib:
  1544.         mb_create dd amb_create
  1545. ;       mb_reinit dd amb_reinit
  1546. ;       mb_setfunctions dd amb_setfunctions
  1547. dd 0,0
  1548.         amb_create db 'mb_create',0
  1549. ;       amb_reinit db 'mb_reinit',0
  1550. ;       amb_setfunctions db 'mb_setfunctions',0
  1551.  
  1552. mouse_dd dd 0x0
  1553. sc system_colors
  1554. last_time dd 0
  1555.  
  1556. align 16
  1557. procinfo process_information
  1558.  
  1559. align 4
  1560. buf_0: dd 0
  1561.         dw 5 ;+4 left
  1562.         dw 35 ;+6 top
  1563. .w: dd 6*64 ;+8 w
  1564. .h: dd 7*64 ;+12 h
  1565. .color: dd 0xffffff ;+16 color
  1566.         db 24 ;+20 bit in pixel
  1567.  
  1568. align 4
  1569. buf_0z: dd 0
  1570.         dw 5 ;+4 left
  1571.         dw 35 ;+6 top
  1572. .w: dd 6*64 ;+8 w
  1573. .h: dd 7*64 ;+12 h
  1574. .color: dd 0 ;+16 color
  1575.         db 32 ;+20 bit in pixel
  1576.  
  1577. align 4
  1578. buf_i0: dd 0
  1579.         dw 5 ;+4 left
  1580.         dw 35 ;+6 top
  1581. .w: dd 0 ;+8 w
  1582. .h: dd 0 ;+12 h
  1583. .color: dd 0 ;+16 color
  1584.         db 24 ;+20 bit in pixel
  1585.  
  1586. align 4
  1587. buf_i1: dd 0
  1588.         dw 105 ;+4 left
  1589.         dw 35 ;+6 top
  1590. .w: dd 0 ;+8 w
  1591. .h: dd 0 ;+12 h
  1592. .color: dd 0 ;+16 color
  1593.         db 24 ;+20 bit in pixel
  1594.  
  1595. align 4
  1596. buf_i2: dd 0
  1597.         dw 205 ;+4 left
  1598.         dw 35 ;+6 top
  1599. .w: dd 0 ;+8 w
  1600. .h: dd 0 ;+12 h
  1601. .color: dd 0 ;+16 color
  1602.         db 24 ;+20 bit in pixel
  1603.  
  1604. align 4
  1605. buf_npl_p: dd 0
  1606.         dw 0 ;+4 left
  1607.         dw 0 ;+6 top
  1608. .w: dd 0 ;+8 w
  1609. .h: dd 0 ;+12 h
  1610. .color: dd 0 ;+16 color
  1611.         db 24 ;+20 bit in pixel
  1612.  
  1613. align 4
  1614. buf_npl: dd 0
  1615.         dw 5 ;+4 left
  1616.         dw 35 ;+6 top
  1617. .w: dd 0 ;+8 w
  1618. .h: dd 0 ;+12 h
  1619. .color: dd 0 ;+16 color
  1620.         db 24 ;+20 bit in pixel
  1621.  
  1622. align 4
  1623. buf_npl_n: dd 0
  1624.         dw 0 ;+4 left
  1625.         dw 0 ;+6 top
  1626. .w: dd 0 ;+8 w
  1627. .h: dd 0 ;+12 h
  1628. .color: dd 0 ;+16 color
  1629.         db 24 ;+20 bit in pixel
  1630.  
  1631. ;¤ ­­ë¥ ¤«ï ᮧ¤ ­¨ï ¬¨­¨¬ «ì­®£® ¥¤¨­¨ç­®£® ¢®ªá¥«ï
  1632. align 4
  1633. vox_6_7_z:
  1634. dd 0,0,1,1,0,0,\
  1635.    0,2,2,2,2,0,\
  1636.    2,2,2,2,2,2,\
  1637.    2,3,2,2,3,2,\
  1638.    2,3,3,3,3,2,\
  1639.    0,3,3,3,3,0,\
  1640.    0,0,3,3,0,0
  1641.  
  1642. align 4
  1643. buf_vox:
  1644.         db 6,7,4,3 ;w,h,h_osn,n
  1645.         rb BUF_STRUCT_SIZE*(2+1)
  1646.  
  1647.  
  1648.  
  1649. ;íâ®â ª®¤ ­¥ ¬®©, ®­ ¯à¥®¡à §ã¥â ç¨á«® ¢ áâபã
  1650. ;input:
  1651. ; eax = value
  1652. ; edi = string buffer
  1653. ;output:
  1654. align 4
  1655. tl_convert_to_str:
  1656.         pushad
  1657.                 mov dword[edi+1],0
  1658.                 call .str
  1659.         popad
  1660.         ret
  1661.  
  1662. align 4
  1663. .str:
  1664.         mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
  1665.     ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
  1666.         cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  1667.         jb @f
  1668.                 xor edx,edx  ;®ç¨áâ¨âì edx
  1669.                 div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  1670.                 push edx     ;¯®«®¦¨âì ¢ á⥪
  1671.                 ;dec edi             ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  1672.                 call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  1673.                 pop eax
  1674.         @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  1675.         or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥  ç¥¬ ¤¢¥ ¢ëè¥
  1676.         stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
  1677.         ret           ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
  1678.  
  1679. i_end:
  1680.                 rb 1024
  1681.         thread:
  1682.                 rb 1024
  1683. stacktop:
  1684.         sys_path rb 1024
  1685.         file_name:
  1686.                 rb 1024 ;4096
  1687.         library_path rb 1024
  1688.         plugin_path rb 4096
  1689.         openfile_path rb 4096
  1690.         filename_area rb 256
  1691. mem:
  1692.