0,0 → 1,1691 |
use32 |
org 0x0 |
db 'MENUET01' ;¨¤¥â¨ä. ¨á¯®«ï¥¬®£® ä ©« ¢á¥£¤ 8 ¡ ©â |
dd 0x1 |
dd start |
dd i_end ;à §¬¥à ¯à¨«®¦¥¨ï |
dd mem |
dd stacktop |
dd 0 |
dd sys_path |
|
include '../../../../programs/macros.inc' |
include '../../../../programs/proc32.inc' |
include '../../../../programs/develop/libraries/box_lib/load_lib.mac' |
include '../trunk/mem.inc' |
include '../trunk/dll.inc' |
|
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
caption db 'Voxel creator 1.08.12',0 ;¯®¤¯¨áì ®ª |
|
struct FileInfoBlock |
Function dd ? |
Position dd ? |
Flags dd ? |
Count dd ? |
Buffer dd ? |
db ? |
FileName dd ? |
ends |
|
BUF_STRUCT_SIZE equ 21 |
buf2d_data equ dword[edi] ;¤ ë¥ ¡ãä¥à ¨§®¡à ¦¥¨ï |
buf2d_w equ dword[edi+8] ;è¨à¨ ¡ãä¥à |
buf2d_h equ dword[edi+12] ;¢ëá®â ¡ãä¥à |
buf2d_l equ word[edi+4] |
buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã |
buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢ ¨ á¯à ¢ ¤«ï ¡ãä¥à |
buf2d_color equ dword[edi+16] ;梥â ä® ¡ãä¥à |
buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥¨ï |
|
vox_offs_tree_table equ 4 |
vox_offs_data equ 12 |
|
run_file_70 FileInfoBlock |
image_data dd 0 ;㪠§ â¥«ì ¢à¥¬¥ãî ¯ ¬ïâì. ¤«ï 㦥 ¯à¥®¡à §®¢ ¨ï ¨§®¡à ¦¥¨ï |
vox_obj_size dd 0 ;à §¬¥à ¢®ªá¥«ì®£® ®¡ê¥ªâ (¤«ï ãáª®à¥¨ï ¢áâ ¢ª¨) |
|
fn_toolbar db 'toolbar.png',0 |
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 |
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*9 |
image_data_toolbar dd 0 |
|
max_open_file_size equ 1024*1024 ;1 Mb |
|
macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥¨© |
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬ |
if path eqtype '' ;¯à®¢¥à塞 § ¤ «¨ áâப®© ¯ à ¬¥âà path |
jmp @f |
local .path_str |
.path_str db path ;ä®à¬¨à㥬 «®ª «ìãî ¯¥à¥¬¥ãî |
db 0 |
@@: |
;32 - áâ ¤ àâë© ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥ ¡ëâì ¡ãä¥à á á¨áâ¥¬ë¬ ¯ã⥬ |
copy_path .path_str,[32],file_name,0x0 |
else |
copy_path path,[32],file_name,0x0 ;ä®à¬¨à㥬 ¯®«ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ® ¢ ®¤®© ¯ ¯ª¥ á ¯à®£à ¬¬®© |
end if |
|
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï |
mov [buf],eax |
|
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 0 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov [run_file_70.Count], dword size |
m2m [run_file_70.Buffer], [buf] |
mov byte[run_file_70+20], 0 |
mov [run_file_70.FileName], file_name |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je @f |
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥ë© ¡ãä¥à image_data |
stdcall dword[img_decode], dword[buf],ebx,0 |
mov dword[image_data],eax |
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥¨¥ ª ä®à¬ âã rgb |
stdcall dword[img_to_rgb2], dword[image_data],dword[buf] |
;㤠«ï¥¬ ¢à¥¬¥ë© ¡ãä¥à image_data |
stdcall dword[img_destroy], dword[image_data] |
@@: |
} |
|
|
|
align 4 |
start: |
load_libraries l_libs_start,l_libs_end |
;¯à®¢¥àª ᪮«ìª® ã¤ ç® § £ã§¨« áì ¡¨¡«¨®â¥ª |
mov ebp,lib_0 |
cmp dword [ebp+ll_struc_size-4],0 |
jz @f |
mcall -1 ;exit not correct |
@@: |
mcall 48,3,sc,sizeof.system_colors |
mcall 40,0x27 |
stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª ¤¨ «®£ |
|
stdcall [buf2d_create], buf_0 ;ᮧ¤ ¨¥ ¡ãä¥à |
stdcall [buf2d_create], buf_0z |
stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z |
|
load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE |
|
stdcall mem.Alloc,max_open_file_size |
mov dword[open_file_vox],eax |
stdcall mem.Alloc,max_open_file_size |
mov dword[open_file_img],eax |
|
mcall 26,9 |
mov [last_time],eax |
|
align 4 |
red_win: |
call draw_window |
|
align 4 |
still: |
mcall 26,9 |
mov ebx,[last_time] |
add ebx,10 ;§ ¤¥à¦ª |
cmp ebx,eax |
jge @f |
mov ebx,eax |
@@: |
sub ebx,eax |
;cmp ebx,10 ;§ ¤¥à¦ª |
;ja timer_funct |
;test ebx,ebx |
;jz timer_funct |
mcall 23 |
cmp eax,0 |
je timer_funct |
|
cmp al,1 |
jz red_win |
cmp al,2 |
jz key |
cmp al,3 |
jz button |
|
jmp still |
|
align 4 |
timer_funct: |
cmp byte[calc],0 |
je still |
|
pushad |
mcall 26,9 |
mov [last_time],eax |
|
; ᪨¤ë¢ ¥¬ 㪠§ ⥫¨ ¡ãä¥à®¢ buf_npl_p, buf_npl, buf_npl_n |
mov edi,buf_npl_p |
mov eax,buf2d_data |
mov edi,buf_npl |
mov ebx,buf2d_data |
mov edi,buf_npl_n |
mov ecx,buf2d_data |
; change buffer data pointers |
mov buf2d_data,eax |
mov edi,buf_npl_p |
mov buf2d_data,ebx |
mov edi,buf_npl |
mov buf2d_data,ecx |
|
mov eax,[n_plane] |
mov ebx,buf2d_w |
dec ebx |
|
cmp ebx,eax |
jg @f |
stdcall create_obj_from_plane,buf_npl,eax ;ᮧ¤ ¥¬ § ¢¥àè î饥 á¥ç¥¨¥ |
;¢ë¢®¤ ª®¥ç®£® १ã«ìâ â |
call draw_object |
mov byte[calc],0 |
jmp .end_f |
@@: |
|
inc eax |
stdcall create_plane, buf_npl_n,eax |
|
; ᮧ¤ ¨¥ ¢®áª¥«ì®£® á¥ç¥¨ï ®á®¢¥ ¡ãä¥à buf_npl |
mov edi,buf_npl |
mov edx,[bby_min] ;0 |
.cycle_0: |
mov ecx,[btx_min] ;0 |
.cycle_1: |
stdcall [buf2d_get_pixel], edi,ecx,edx |
cmp eax,buf2d_color |
je @f |
mov esi,eax |
call need_node |
cmp eax,buf2d_color |
jne @f ;®âᥨ¢ ¥¬ ¢ãâ२¥ ¢®ªá¥«¨, ¤«ï ®¯â¨¬¨§ 樨 ¬®¤¥«¨ |
mov eax,ebx |
sub eax,edx |
stdcall buf2d_vox_obj_create_node, [open_file_vox],ecx,[n_plane],\ |
eax,[k_scale],esi |
@@: |
inc ecx |
cmp ecx,ebx |
jle .cycle_1 |
inc edx |
cmp edx,ebx |
jle .cycle_0 |
|
stdcall [buf2d_draw], buf_npl |
inc dword[n_plane] ;¯¥à¥¬¥é ¥¬ ¯«®áª®áâì á¥ç¥¨ï |
.end_f: |
popad |
jmp still |
|
align 4 |
proc create_plane, buf_img:dword, n_plane:dword |
pushad |
; ª®¯¨à㥬 «¨æ¥¢®¥ ¨§®¡à ¦¥¨¥ ¢ ¡ãä¥à buf_img |
; bby_min - ¨á¯®«ì§ã¥¬ ¤«ï ®¯â¨¬¨§ 樨 (¥á«¨ ᢥàåã ¨§®¡à ¦¥¨¥ ¯ãá⮥) |
mov eax,[bby_min] |
mov esi,buf_i2 |
mov esi,[esi] ;buf2d_data |
mov edi,[buf_img] |
mov ecx,buf2d_w |
imul eax,ecx |
mov ebx,ecx |
imul ecx,ebx |
sub ecx,eax |
lea ecx,[ecx+ecx*2] |
mov edi,buf2d_data |
lea eax,[eax+eax*2] |
add edi,eax |
add esi,eax |
cld |
rep movsb |
|
mov ecx,ebx |
dec ebx |
mov edi,buf_i0 |
.cycle_0: |
mov eax,ebx |
sub eax,[n_plane] ;eax - ¯¥à¥¢¥àãâ ï ª®®à¤¨ â n_plane |
stdcall [buf2d_get_pixel], edi,ecx,eax ;[n_plane] |
cmp eax,buf2d_color |
jne @f |
;¢ëç¥àª¨¢ ¨¥ ¢¥à⨪ «ì®© «¨¨¨ ¨§ á¥ç¥¨ï buf_img |
stdcall [buf2d_line], [buf_img],ecx,[bby_min],ecx,ebx, buf2d_color |
jmp .end_1 |
@@: |
mov edx,[bby_min] ;xor edx,edx |
mov esi,eax |
.cycle_1: ;横« ¤«ï «®¦¥¨ï ¢¥à奩 ⥪áâãàë |
stdcall [buf2d_get_pixel], [buf_img],ecx,edx |
cmp eax, buf2d_color |
je .end_0 |
stdcall [buf2d_set_pixel], [buf_img],ecx,edx, esi ; «®¦¥¨¥ ¢¥à奩 ⥪áâãàë |
jmp .end_1 |
.end_0: |
inc edx |
cmp edx,ebx |
jle .cycle_1 |
.end_1: |
loop .cycle_0 |
|
;£®à¨§®â «ìë¥ «¨¨¨ ®á®¢¥ ¡®ª®¢®© £à ¨ |
mov ecx,[bby_min] |
mov edi,buf_i1 |
.cycle_2: |
stdcall [buf2d_get_pixel], edi,[n_plane],ecx |
cmp eax,buf2d_color |
jne @f |
;¢ëç¥àª¨¢ ¨¥ £®à¨§®â «ì®© «¨¨¨ ¨§ á¥ç¥¨ï buf_img |
stdcall [buf2d_line], [buf_img],[btx_min],ecx,[btx_max],ecx, buf2d_color |
jmp .end_3 |
@@: |
mov edx,[btx_max] ;ebx |
mov esi,eax |
.cycle_3: ;横« ¤«ï «®¦¥¨ï ¡®ª®¢®© ⥪áâãàë |
stdcall [buf2d_get_pixel], [buf_img],edx,ecx |
cmp eax, buf2d_color |
je .end_2 |
stdcall [buf2d_set_pixel], [buf_img],edx,ecx, esi ; «®¦¥¨¥ ¡®ª®¢®© ⥪áâãàë |
jmp .end_3 |
.end_2: |
dec edx |
cmp edx,[btx_min] |
jge .cycle_3 |
.end_3: |
inc ecx |
cmp ecx,ebx |
jle .cycle_2 |
popad |
ret |
endp |
|
align 4 |
proc create_obj_from_plane, buf_img:dword, n_plane:dword |
pushad |
; ᮧ¤ ¨¥ ¢®áª¥«ì®£® á¥ç¥¨ï ®á®¢¥ ¡ãä¥à buf_img |
mov edi,[buf_img] |
mov ebx,buf2d_w |
dec ebx |
mov edx,[bby_min] ;0 |
.cycle_0: |
mov ecx,[btx_min] ;0 |
.cycle_1: |
stdcall [buf2d_get_pixel], edi,ecx,edx |
cmp eax,buf2d_color |
je @f |
mov esi,eax |
;call need_node |
;cmp eax,buf2d_color |
;jne @f ;®âᥨ¢ ¥¬ ¢ãâ२¥ ¢®ªá¥«¨, ¤«ï ®¯â¨¬¨§ 樨 ¬®¤¥«¨ |
mov eax,ebx |
sub eax,edx |
stdcall buf2d_vox_obj_create_node, [open_file_vox],ecx,[n_plane],\ |
eax,[k_scale],esi |
@@: |
inc ecx |
cmp ecx,ebx |
jle .cycle_1 |
inc edx |
cmp edx,ebx |
jle .cycle_0 |
ret |
popad |
endp |
|
;description: |
; äãªæ¨ï ¯à®¢¥àï¥â 㦮 «¨ ®âᥨ¢ âì ¢®ªá¥«ì á ª®®à¤¨ â ¬¨ [n_plane],ecx,edx |
;input: |
; ebx = max size y - 1 |
;output: |
; eax = buf2d_color if node need |
align 4 |
need_node: |
mov eax,buf2d_color |
cmp ecx,[btx_min] ;0 |
jle .end_f |
cmp ecx,[btx_max] ;0 |
jge .end_f |
cmp edx,[bby_min] ;0 |
jle .end_f |
cmp edx,ebx ;max-1 |
jge .end_f |
push ecx edx |
stdcall [buf2d_get_pixel], buf_npl_p,ecx,edx ;¯à®¢¥àª ¯à¥¤ë¤ã饣® á¥ç¥¨ï |
cmp eax,buf2d_color |
je @f |
stdcall [buf2d_get_pixel], buf_npl_n,ecx,edx ;¯à®¢¥àª ¯®á«¥¤ãî饣® á¥ç¥¨ï |
cmp eax,buf2d_color |
je @f |
dec ecx |
stdcall [buf2d_get_pixel], edi,ecx,edx |
cmp eax,buf2d_color |
je @f |
add ecx,2 |
stdcall [buf2d_get_pixel], edi,ecx,edx |
cmp eax,buf2d_color |
je @f |
dec ecx |
dec edx |
stdcall [buf2d_get_pixel], edi,ecx,edx |
cmp eax,buf2d_color |
je @f |
add edx,2 |
stdcall [buf2d_get_pixel], edi,ecx,edx |
;cmp eax,buf2d_color |
;je @f |
@@: |
pop edx ecx |
.end_f: |
ret |
|
; |
;x0y0 - x1y0 |
;x1y0 - x1y1 |
;x0y1 - x0y0 |
;x1y1 - x0y1 |
align 4 |
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword |
mov ebx,[v_obj] |
add ebx,vox_offs_tree_table |
mov ecx,2 |
cld |
@@: |
mov eax,dword[ebx] |
mov byte[ebx+1],al |
mov byte[ebx+3],ah |
shr eax,16 |
mov byte[ebx],al |
mov byte[ebx+2],ah |
add ebx,4 |
loop @b |
ret |
endp |
|
align 4 |
draw_window: |
pushad |
mcall 12,1 |
|
; *** à¨á®¢ ¨¥ £« ¢®£® ®ª (¢ë¯®«ï¥âáï 1 à § ¯à¨ § ¯ã᪥) *** |
xor eax,eax |
mov ebx,(20 shl 16)+410 |
mov ecx,(20 shl 16)+520 |
mov edx,[sc.work] |
or edx,(3 shl 24)+0x30000000 |
mov edi,caption |
int 0x40 |
|
; *** ᮧ¤ ¨¥ ª®¯®ª ¯ ¥«ì *** |
mov eax,8 |
mov ebx,(5 shl 16)+20 |
mov ecx,(5 shl 16)+20 |
mov edx,3 |
mov esi,[sc.work_button] |
int 0x40 |
|
mov ebx,(30 shl 16)+20 |
mov edx,4 |
int 0x40 |
|
mov ebx,(55 shl 16)+20 |
mov edx,5 |
int 0x40 |
|
mov ebx,(85 shl 16)+20 |
mov edx,6 |
int 0x40 |
|
add ebx,25 shl 16 |
mov edx,7 |
int 0x40 |
|
add ebx,25 shl 16 |
mov edx,8 |
int 0x40 |
|
add ebx,25 shl 16 |
mov edx,9 |
int 0x40 |
|
add ebx,25 shl 16 |
mov edx,10 |
int 0x40 |
|
add ebx,25 shl 16 |
mov edx,11 |
int 0x40 |
|
add ebx,25 shl 16 |
mov edx,12 |
int 0x40 |
|
; *** à¨á®¢ ¨¥ ¨ª®®ª ª®¯ª å *** |
mov eax,7 |
mov ebx,[image_data_toolbar] |
mov ecx,(16 shl 16)+16 |
mov edx,(7 shl 16)+7 ;icon new |
int 0x40 |
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ;icon open |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ;icon save |
int 0x40 |
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(30 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
|
call draw_buffers |
|
mcall 12,2 |
popad |
ret |
|
align 4 |
draw_buffers: |
; *** à¨á®¢ ¨¥ ¡ãä¥à *** |
stdcall [buf2d_draw], buf_0 |
stdcall [buf2d_draw], buf_i0 |
stdcall [buf2d_draw], buf_i1 |
stdcall [buf2d_draw], buf_i2 |
ret |
|
align 4 |
key: |
mcall 2 |
jmp still |
|
|
align 4 |
button: |
mcall 17 |
cmp ah,3 |
jne @f |
call but_new_file |
@@: |
cmp ah,4 |
jne @f |
call but_open_file |
@@: |
cmp ah,5 |
jne @f |
call but_save_file |
@@: |
cmp ah,6 |
jne @f |
call but_1 |
@@: |
cmp ah,7 |
jne @f |
call but_2 |
@@: |
cmp ah,8 |
jne @f |
call but_3 |
@@: |
cmp ah,9 |
jne @f |
stdcall but_run, 0 |
@@: |
cmp ah,10 |
jne @f |
stdcall but_run, 1 |
@@: |
cmp ah,11 |
jne @f |
call but_5 |
@@: |
cmp ah,12 |
jne @f |
call but_rot_z |
@@: |
cmp ah,1 |
jne still |
.exit: |
stdcall [buf2d_delete],buf_0 |
stdcall [buf2d_delete],buf_0z |
stdcall [buf2d_vox_brush_delete],buf_vox |
stdcall [buf2d_delete],buf_i0 |
stdcall [buf2d_delete],buf_i1 |
stdcall [buf2d_delete],buf_i2 |
stdcall [buf2d_delete],buf_npl_p |
stdcall [buf2d_delete],buf_npl |
stdcall [buf2d_delete],buf_npl_n |
stdcall mem.Free,[image_data_toolbar] |
stdcall mem.Free,[open_file_vox] |
stdcall mem.Free,[open_file_img] |
mcall -1 |
|
|
align 4 |
vox_new_data: |
db 2,0,0,0 |
db 000b,001b,010b,011b, 100b,101b,110b,111b ;default table |
dd 0 ;null node |
|
align 4 |
proc but_new_file uses ecx edi esi |
mov ecx,vox_offs_data+4 |
mov [vox_obj_size],ecx |
mov esi,vox_new_data |
mov edi,[open_file_vox] |
cld |
rep movsb |
ret |
endp |
|
align 4 |
open_file_vox dd 0 ;㪠§ â¥«ì ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ä ©«®¢ |
open_file_img dd 0 ;㪠§ â¥«ì ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ⥪áâãà |
|
align 4 |
but_open_file: |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
mov [OpenDialog_data.type],0 |
stdcall [OpenDialog_Start],OpenDialog_data |
cmp [OpenDialog_data.status],2 |
je .end_open_file |
;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
|
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 0 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov [run_file_70.Count], dword max_open_file_size |
m2m [run_file_70.Buffer],dword[open_file_vox] |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je .end_open_file |
; ¯à®¢¥àª ¯à ¢¨«ì®áâì ¢®ªá¥«ì®£® ä®à¬ â |
mov edi,[open_file_vox] |
add edi,vox_offs_tree_table |
xor bx,bx |
mov ecx,8 |
cld |
@@: |
movzx ax,byte[edi] |
add bx,ax |
inc edi |
loop @b |
cmp bx,28 ;28=0+1+2+...+7 |
jne .err_open |
|
mcall 71,1,openfile_path |
stdcall buf2d_vox_obj_get_size,[open_file_vox] |
mov [vox_obj_size],eax |
call draw_object |
|
jmp .end_open_file |
.err_open: |
call but_new_file |
stdcall [mb_create],msgbox_4,thread |
.end_open_file: |
popad |
ret |
|
align 4 |
but_save_file: |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
mov [OpenDialog_data.type],1 |
stdcall [OpenDialog_Start],OpenDialog_data |
cmp [OpenDialog_data.status],2 |
je .end_save_file |
;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
|
mov eax,6 ;dword[v_zoom] ;§ ¤ ¥¬ ¬ áèâ ¡ ¯® 㬮«ç ¨î |
mov ebx,[open_file_vox] |
mov byte[ebx],al |
|
stdcall buf2d_vox_obj_get_size, ebx |
mov dword[run_file_70.Count], eax ;à §¬¥à ä ©« |
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 2 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov ebx, dword[open_file_vox] |
mov [run_file_70.Buffer], ebx |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je .end_save_file |
|
.end_save_file: |
popad |
ret |
|
align 4 |
but_1: |
stdcall open_image_in_buf, buf_i0 |
ret |
|
align 4 |
but_2: |
stdcall open_image_in_buf, buf_i1 |
call set_buf_tabs |
ret |
|
align 4 |
but_3: |
stdcall open_image_in_buf, buf_i2 |
call set_buf_tabs |
ret |
|
;description: |
; ¢ § ¢¨á¨¬®á⨠®â è¨à¨ë 1-£® ¡ãä¥à ãáâ ¢«¨¢ ¥¬ ®âáâã¯ë ¤«ï 2-£® ¨ 3-£® ¡ãä¥à®¢ |
align 4 |
set_buf_tabs: |
push eax ebx edi |
mov edi,buf_i0 |
cmp buf2d_data,0 |
je @f |
movzx eax,buf2d_l |
mov ebx,buf2d_w |
cmp ebx,128 |
jle .end_0 |
mov ebx,128 |
.end_0: |
mov edi,buf_i1 |
mov buf2d_l,ax |
add buf2d_l,bx |
add buf2d_l,2 |
shl ebx,1 |
mov edi,buf_i2 |
mov buf2d_l,ax |
add buf2d_l,bx |
add buf2d_l,4 |
@@: |
pop edi ebx eax |
ret |
|
align 4 |
get_scale: |
push eax edi |
mov edi,buf_i0 |
mov eax,buf2d_w |
|
mov dword[k_scale],-1 |
.cycle_s: |
cmp eax,0 |
je @f |
shr eax,1 |
inc dword[k_scale] |
jmp .cycle_s |
@@: |
pop edi eax |
ret |
|
align 4 |
proc set_borders uses eax ebx ecx edx edi |
mov ecx,dword[k_scale] |
mov edx,1 |
shl edx,cl |
|
;®¯à¥¤¥«ï¥¬ ¬¨¨¬ «ìãî ª®®à¤¨ âã y «¨æ¥¢®© £à ¨ |
mov edi,buf_i2 |
mov dword[bby_min],0 |
xor ecx,ecx |
.cycle_0: |
xor ebx,ebx |
.cycle_1: |
stdcall [buf2d_get_pixel],edi,ebx,ecx |
cmp eax,buf2d_color |
jne @f |
inc ebx |
cmp ebx,edx |
jl .cycle_1 |
inc dword[bby_min] |
inc ecx |
cmp ecx,edx |
jl .cycle_0 |
@@: |
|
;®¯à¥¤¥«ï¥¬ ¬¨¨¬ «ìãî ª®®à¤¨ âã x «¨æ¥¢®© £à ¨ |
mov dword[btx_min],0 |
xor ebx,ebx |
.cycle_2: |
mov ecx,[bby_min] |
.cycle_3: |
stdcall [buf2d_get_pixel],edi,ebx,ecx |
cmp eax,buf2d_color |
jne @f |
inc ecx |
cmp ecx,edx |
jl .cycle_3 |
inc dword[btx_min] |
inc ebx |
cmp ebx,edx |
jl .cycle_2 |
@@: |
|
;®¯à¥¤¥«ï¥¬ ¬ ªá¨¬ «ìãî ª®®à¤¨ âã x «¨æ¥¢®© £à ¨ |
mov [btx_max],edx |
dec dword[btx_max] |
mov ebx,[btx_max] |
.cycle_4: |
mov ecx,[bby_min] |
.cycle_5: |
stdcall [buf2d_get_pixel],edi,ebx,ecx |
cmp eax,buf2d_color |
jne @f |
inc ecx |
cmp ecx,edx |
jl .cycle_5 |
dec dword[btx_max] |
dec ebx |
cmp ebx,[btx_min] |
jg .cycle_4 |
@@: |
|
;stdcall [buf2d_line], edi, 0,[bby_min],50,[bby_min],255 |
ret |
endp |
|
align 4 |
btx_min dd 0 ;¡ãä¥à ¢¥à娩 ¬¨. x |
btx_max dd 0 |
bty_min dd 0 ;¡ãä¥à ¢¥à娩 ¬¨. y |
bty_max dd 0 |
;bbx_min dd 0 |
;bbx_max dd 0 |
bby_min dd 0 ;¡ãä¥à ¡®ª®¢®© ¬¨. y |
bby_max dd 0 |
k_scale dd 0 |
n_plane dd 0 |
|
calc db 0 |
|
; ᮧ¤ ¨¥ ¢®ªá¥«ï ¢ 3 íâ ¯ : |
; 1) ¨é¥¬ ¬¥áâ® ¢ áâàãªâãॠ¤¥à¥¢ , ªã¤ ¤® ¢áâ ¢¨âì (¥á«¨ ¢¥â¢ì áãé¥áâ¢ã¥â, 2-© íâ ¯ ¯à®¯ã᪠¥¬) |
; 2) ¢áâ ¢«ï¥¬ ®¢ãî ¢¥â¢ì á ¢®ªá¥«¥¬ (3-© íâ ¯ 㦥 ¥ ¤¥« ¥¬) |
; 3) ¬¥ï¥¬ 梥⠢®ªá¥«ï |
align 4 |
proc buf2d_vox_obj_create_node, v_obj:dword,coord_x:dword,coord_y:dword,\ |
coord_z:dword,k_scale:dword,color:dword |
pushad |
locals |
p_node dd 0 ;த¨â¥«ì᪨© 㧥« |
endl |
|
mov edi,[v_obj] |
add edi,vox_offs_data |
mov esi,[k_scale] |
cmp esi,1 |
jl .change |
; *** (1) *** |
.found: |
stdcall vox_obj_get_node_position, [v_obj],[coord_x],[coord_y],[coord_z],esi |
movzx bx,byte[edi+3] |
mov [p_node],edi |
add edi,4 |
|
cmp eax,0 |
je .end_1 |
mov ecx,eax |
cld |
@@: ;横« ¤«ï ¯à®¯ã᪠¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥ |
bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à¨¥ 㧫ë |
jnc .end_0 |
xor eax,eax |
stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à¨å 㧫®¢, ¢ ¤ ®© ¢¥â¢¨ |
.end_0: |
shr bx,1 |
loop @b |
.end_1: |
bt bx,0 |
jnc .creat ;¥á«¨ ¯®¤¤¥à¥¢ ¥ áãé¥áâ¢ã¥â, ¯¥à¥å®¤¨¬ ª ᮧ¤ ¨î |
dec esi |
cmp esi,0 |
jg .found |
jmp .change |
|
; *** (2) *** |
.creat: |
mov edx,[color] ;¬¥ï¥¬ 梥â |
and edx,0xffffff ;¤«ï ¯à®ä¨« ªâ¨ª¨ |
mov ecx,esi |
stdcall vox_obj_add_nodes_mem, [v_obj],edi,ecx ;à áè¨à塞 ¬¥áâ® § ¨¬ ¥¬®¥ ®¡ê¥ªâ®¬, ¤«ï ¤®¡ ¢«¥¨ï ®¢ëå 㧫®¢ |
mov ebx,[p_node] |
cld |
@@: |
mov dword[edi],edx |
stdcall vox_obj_get_node_bit_mask, [v_obj],[coord_x],[coord_y],[coord_z],esi |
or byte[ebx+3],al |
|
mov ebx,edi |
add edi,4 |
dec esi |
loop @b |
jmp .end_2 |
|
; *** (3) *** |
.change: |
mov eax,[color] ;¬¥ï¥¬ 梥â |
mov word[edi],ax |
shr eax,16 |
mov byte[edi+2],al |
|
.end_2: |
popad |
ret |
endp |
|
; ᤢ¨£ ¥â ã§«ë ¤«ï ¤®¡ ¢«¥¨ï ®¢ëå 㧫®¢ |
;input: |
; p_insert - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨ |
; count - ª®««¨ç¥á⢮ ¢áâ ¢«ï¥¬ëå 㧫®¢ |
align 4 |
proc vox_obj_add_nodes_mem uses eax ecx edi esi, v_obj:dword,p_insert:dword,count:dword |
mov esi,[v_obj] |
;stdcall buf2d_vox_obj_get_size,esi |
add esi,[vox_obj_size] ;esi - 㪠§ â¥«ì ª®¥æ ä ©« |
mov edi,[count] |
shl edi,2 |
add [vox_obj_size],edi |
add edi,esi ;edi - 㪠§ â¥«ì ¡ã¤ã騩 ª®¥æ ä ©« |
mov ecx,esi |
sub ecx,[p_insert] |
shr ecx,2 ;ecx - ç¨á«® 横«®¢ ¤«ï ª®¯¨à®¢ ¨ï |
sub esi,4 ;esi - 㪠§ â¥«ì ¯®á«¥¤¨© 㧥« |
sub edi,4 ;edi - 㪠§ â¥«ì ¡ã¤ã騩 ¯®á«¥¤¨© 㧥« |
std |
rep movsd ;ᤢ¨£ ¥¬ ¯ ¬ïâì |
ret |
endp |
|
;??? |
; ®¯à¥¤¥«¥¨¥ ¯®§¨æ¨¨ 㧫 ¢ ¤¥à¥¢¥ (®â 0 ¤® 7) |
align 4 |
proc vox_obj_get_node_position uses ebx ecx edi, v_obj:dword,\ |
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword |
mov ecx,[k_scale] |
dec ecx |
mov eax,[coord_x] |
mov ebx,[coord_y] |
mov edi,[coord_z] |
cmp ecx,1 |
jl .end_0 |
shr eax,cl |
shr ebx,cl |
shr edi,cl |
.end_0: |
and eax,1 |
bt ebx,0 |
jnc @f |
bts eax,1 |
@@: |
bt edi,0 |
jnc @f |
bts eax,2 |
@@: |
|
mov edi,[v_obj] |
add edi,vox_offs_tree_table |
@@: |
cmp al,byte[edi] |
je @f |
inc edi |
jmp @b |
@@: |
sub edi,[v_obj] |
sub edi,vox_offs_tree_table |
mov eax,edi |
|
ret |
endp |
|
;??? |
;input: |
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ |
;output: |
; eax - eax + ç¨á«® 㧫®¢ ¢ ¤ ëå ¢®ªá. ®¡ê¥ªâ |
; edi - 㪠§ ⥫ì ᬥé¥ë¥ ¤ ë¥ ¢®ªá. ®¡ê¥ªâ |
align 4 |
proc vox_obj_rec0 |
inc eax |
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï |
je .sub_trees |
|
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
push ebx ecx |
mov bh,byte[edi+3] |
add edi,4 |
mov bl,8 |
.cycle: |
bt bx,8 ;â¥áâ¨à㥬 ⮫쪮 bh |
jnc .c_next |
stdcall vox_obj_rec0 |
.c_next: |
shr bh,1 |
dec bl |
jnz .cycle |
pop ecx ebx |
|
jmp .end_f |
.sub_trees: |
add edi,4 |
.end_f: |
ret |
endp |
|
;output: |
; eax - 1,2,4,8,16, ... ,128 |
align 4 |
proc vox_obj_get_node_bit_mask uses ebx ecx edi, v_obj:dword,\ |
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword |
mov ecx,[k_scale] |
dec ecx |
mov eax,[coord_x] |
mov ebx,[coord_y] |
mov edi,[coord_z] |
cmp ecx,1 |
jl .end_0 |
shr eax,cl |
shr ebx,cl |
shr edi,cl |
.end_0: |
and eax,1 |
bt ebx,0 |
jnc @f |
bts eax,1 |
@@: |
bt edi,0 |
jnc @f |
bts eax,2 |
@@: |
|
mov ecx,[v_obj] |
add ecx,vox_offs_tree_table |
@@: |
cmp al,byte[ecx] |
je @f |
inc ecx |
jmp @b |
@@: |
mov eax,1 ;ãáâ ¢«¨¢ ¥¬ ¯¥à¢® ç «ì®¥ § 票¥ ¡¨â |
sub ecx,[v_obj] |
sub ecx,vox_offs_tree_table |
jz @f |
shl eax,cl ;ᤢ¨£ ¥¬ ¡¨â |
@@: |
|
ret |
endp |
|
; |
;output: |
; eax - à §¬¥à ¢ ¡ ©â å § ¨¬ ¥¬ë© ®¡ê¥ªâ®¬ v_obj |
align 4 |
proc buf2d_vox_obj_get_size uses edi, v_obj:dword |
mov edi,[v_obj] |
add edi,vox_offs_data |
xor eax,eax |
stdcall vox_obj_rec0 ;eax - ç¨á«® 㧫®¢ ¢ ®¡ê¥ªâ¥ v_obj |
shl eax,2 |
add eax,vox_offs_data |
ret |
endp |
|
;input: |
; mode_add - ¥á«¨ ¥ à ¢® 0 ⮣¤ ᮧ¤ ¨¥ ¢ ०¨¬¥ ¤®¡ ¢«¥¨ï ¢®ªá¥«¥© |
align 4 |
proc but_run uses eax ebx edi, mode_add:dword |
; ¯à®¢¥àª à §¬¥à®¢ ¨§®¡à ¦¥¨© (⥪áâãà) |
mov edi,buf_i0 |
mov ebx,buf2d_h |
cmp ebx,2 |
jle .err_size_t |
cmp buf2d_w,ebx |
jne .err_size_t |
; |
mov edi,buf_i1 |
cmp ebx,buf2d_h |
jne .err_size_tb |
mov ebx,buf2d_h |
cmp ebx,2 |
jle .err_size_b |
cmp buf2d_w,ebx |
jne .err_size_b |
|
cmp dword[vox_obj_size],vox_offs_data |
jl .n_file ;¥á«¨ à ìè¥ ¥ ¡ë«® ®âªàëâëå ä ©«®¢ |
cmp dword[mode_add],0 |
jne @f |
.n_file: |
call but_new_file |
@@: |
|
mov edi,buf_i0 |
mov eax,buf2d_w |
mov edi,buf_npl |
cmp buf2d_data,0 |
jne @f |
; *** ᮧ¤ ¥¬ ¡ãä¥à |
m2m buf2d_w,eax |
m2m buf2d_h,eax |
stdcall [buf2d_create],edi |
mov edi,buf_npl_p |
m2m buf2d_w,eax |
m2m buf2d_h,eax |
stdcall [buf2d_create],edi |
mov edi,buf_npl_n |
m2m buf2d_w,eax |
m2m buf2d_h,eax |
stdcall [buf2d_create],edi |
jmp .end_0 |
@@: |
; *** ¨§¬¥ï¥¬ à §¬¥àë ¡ãä¥à®¢ |
stdcall [buf2d_resize], edi, eax,eax |
mov edi,buf_npl_p |
stdcall [buf2d_resize], edi, eax,eax |
mov edi,buf_npl_n |
stdcall [buf2d_resize], edi, eax,eax |
.end_0: |
mov dword[n_plane],1 |
mov byte[calc],1 |
call get_scale |
call set_borders |
|
stdcall create_plane,buf_npl,0 |
stdcall create_plane,buf_npl_n,1 |
stdcall create_obj_from_plane,buf_npl,0 ;ᮧ¤ ¥¬ ç «ì®¥ á¥ç¥¨¥ |
|
jmp @f |
.err_size_t: |
stdcall [mb_create],msgbox_0,thread |
jmp @f |
.err_size_b: |
stdcall [mb_create],msgbox_1,thread |
jmp @f |
.err_size_tb: |
stdcall [mb_create],msgbox_3,thread |
;jmp @f |
@@: |
ret |
endp |
|
align 4 |
but_5: |
cmp byte[calc],0 |
je @f |
call draw_object |
mov byte[calc],0 |
@@: |
ret |
|
align 4 |
but_rot_z: |
stdcall vox_obj_rot_z, [open_file_vox] |
call draw_object |
ret |
|
align 4 |
draw_object: |
;¢ë¢®¤ १ã«ìâ â íªà |
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, buf_vox,\ |
[open_file_vox], 0,0, 0, 6 ;[k_scale] |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
ret |
|
align 4 |
proc open_image_in_buf, buf:dword |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
mov [OpenDialog_data.type],0 |
stdcall [OpenDialog_Start],OpenDialog_data |
cmp [OpenDialog_data.status],2 |
je .end_open_file |
|
;stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï |
;mov [buf],eax |
|
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 0 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov [run_file_70.Count], dword max_open_file_size |
m2m [run_file_70.Buffer],dword[open_file_img] |
mov byte[run_file_70+20], 0 |
mov [run_file_70.FileName], openfile_path |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je .end_0 |
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥ë© ¡ãä¥à image_data |
stdcall dword[img_decode], dword[open_file_img],ebx,0 |
cmp eax,0 |
je .end_0 ;¥á«¨ àãè¥ ä®à¬ â ä ©« |
mov dword[image_data],eax |
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥¨¥ ª ä®à¬ âã rgb |
stdcall dword[img_to_rgb2], dword[image_data],dword[open_file_img] |
|
mov eax,dword[image_data] |
mov edi,[buf] |
cmp buf2d_data,0 |
jne @f |
m2m buf2d_w,dword[eax+4] ;+4 = image width |
m2m buf2d_h,dword[eax+8] ;+8 = image heihht |
stdcall [buf2d_create_f_img], edi,[open_file_img] |
jmp .end_1 |
@@: |
mov ebx,dword[eax+4] |
mov ecx,dword[eax+8] |
stdcall [buf2d_resize], edi, ebx,ecx ;¨§¬¥ï¥¬ à §¬¥àë ¡ãä¥à |
imul ecx,ebx |
lea ecx,[ecx+ecx*2] |
mov edi,buf2d_data |
mov esi,[open_file_img] |
cld |
rep movsb ;copy image |
.end_1: |
|
;㤠«ï¥¬ ¢à¥¬¥ë© ¡ãä¥à image_data |
stdcall dword[img_destroy], dword[image_data] |
.end_0: |
|
call draw_buffers |
.end_open_file: |
popad |
ret |
endp |
|
;input: |
; buf - 㪠§ ⥫ì áâபã, ç¨á«® ¤®«¦® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç®¬ ¢¨¤¥ |
;output: |
; eax - ç¨á«® |
align 4 |
proc conv_str_to_int, buf:dword |
xor eax,eax |
push ebx ecx esi |
xor ebx,ebx |
mov esi,[buf] |
;®¯à¥¤¥«¥¨¥ ®âà¨æ ⥫ìëå ç¨á¥« |
xor ecx,ecx |
inc ecx |
cmp byte[esi],'-' |
jne @f |
dec ecx |
inc esi |
@@: |
|
cmp word[esi],'0x' |
je .load_digit_16 |
|
.load_digit_10: ;áç¨âë¢ ¨¥ 10-â¨çëå æ¨äà |
mov bl,byte[esi] |
cmp bl,'0' |
jl @f |
cmp bl,'9' |
jg @f |
sub bl,'0' |
imul eax,10 |
add eax,ebx |
inc esi |
jmp .load_digit_10 |
jmp @f |
|
.load_digit_16: ;áç¨âë¢ ¨¥ 16-à¨çëå æ¨äà |
add esi,2 |
.cycle_16: |
mov bl,byte[esi] |
cmp bl,'0' |
jl @f |
cmp bl,'f' |
jg @f |
cmp bl,'9' |
jle .us1 |
cmp bl,'A' |
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A' |
.us1: ;á®áâ ¢®¥ ãá«®¢¨¥ |
cmp bl,'F' |
jle .us2 |
cmp bl,'a' |
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a' |
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥à娩 ॣ¨áâà, ¤«ï ã¯à®é¥¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨ |
.us2: ;á®áâ ¢®¥ ãá«®¢¨¥ |
sub bl,'0' |
cmp bl,9 |
jle .cor1 |
sub bl,7 ;convert 'A' to '10' |
.cor1: |
shl eax,4 |
add eax,ebx |
inc esi |
jmp .cycle_16 |
@@: |
cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ ⥫쮥 |
jne @f |
sub ecx,eax |
mov eax,ecx |
@@: |
pop esi ecx ebx |
ret |
endp |
|
msgbox_0: |
db 1,0 |
db '¨¬ ¨¥',0 |
db ' §¬¥à ¢¥à奣® ¨§®¡à ¦¥¨ï ¥ ª®à¥ªâë©',0 |
db ' ªàëâì',0 |
db 0 |
|
msgbox_1: |
db 1,0 |
db '¨¬ ¨¥',0 |
db ' §¬¥à ¡®ª®¢®£® ¨§®¡à ¦¥¨ï ¥ ª®à¥ªâë©',0 |
db ' ªàëâì',0 |
db 0 |
|
msgbox_2: |
db 1,0 |
db '¨¬ ¨¥',0 |
db ' §¬¥à ¯¥à¥¤¥£® ¨§®¡à ¦¥¨ï ¥ ª®à¥ªâë©',0 |
db ' ªàëâì',0 |
db 0 |
|
msgbox_3: |
db 1,0 |
db '¨¬ ¨¥',0 |
db ' §¬¥àë ¢¥à奣® ¨ ¡®ª®¢®£® ¨§®¡à ¦¥¨© ¥ ᮢ¯ ¤ îâ',13,\ |
'âªà®©â¥ ¨§®¡à ¦¥¨ï ®¤¨ ª®¢ëå à §¬¥à®¢',0 |
db ' ªàëâì',0 |
db 0 |
|
msgbox_4: |
db 1,0 |
db '¨¬ ¨¥',0 |
db 'âªàë¢ ¥¬ë© ä ©« ᮤ¥à¦¨â ¥ ¢®ªá¥«ìë© ä®à¬ â',0 |
db ' ªàëâì',0 |
db 0 |
|
;¤ ë¥ ¤«ï ¤¨ «®£ ®âªàëâ¨ï ä ©«®¢ |
align 4 |
OpenDialog_data: |
.type dd 0 ;0 - ®âªàëâì, 1 - á®åà ¨âì, 2 - ¢ë¡à âì ¤â४â®à¨î |
.procinfo dd procinfo ;+4 |
.com_area_name dd communication_area_name ;+8 |
.com_area dd 0 ;+12 |
.opendir_path dd plugin_path ;+16 |
.dir_default_path dd default_dir ;+20 |
.start_path dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢ |
.draw_window dd draw_window ;+28 |
.status dd 0 ;+32 |
.openfile_path dd openfile_path ;+36 ¯ãâì ª ®âªàë¢ ¥¬®¬ã ä ©«ã |
.filename_area dd filename_area ;+40 |
.filter_area dd Filter |
.x: |
.x_size dw 420 ;+48 ; Window X size |
.x_start dw 10 ;+50 ; Window X position |
.y: |
.y_size dw 320 ;+52 ; Window y size |
.y_start dw 10 ;+54 ; Window Y position |
|
default_dir db '/rd/1',0 |
|
communication_area_name: |
db 'FFFFFFFF_open_dialog',0 |
open_dialog_name: |
db 'opendial',0 |
communication_area_default_path: |
db '/rd/1/File managers/',0 |
|
Filter: |
dd Filter.end - Filter ;.1 |
.1: |
db 'PNG',0 |
db 'JPG',0 |
db 'JPEG',0 |
db 'BMP',0 |
db 'GIF',0 |
db 'VOX',0 |
.end: |
db 0 |
|
|
|
head_f_i: |
head_f_l db '¨á⥬ ï ®è¨¡ª ',0 |
|
system_dir_0 db '/sys/lib/' |
lib_name_0 db 'proc_lib.obj',0 |
err_message_found_lib_0 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'proc_lib.obj',39,0 |
err_message_import_0 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0 |
|
system_dir_1 db '/sys/lib/' |
lib_name_1 db 'libimg.obj',0 |
err_message_found_lib_1 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'libimg.obj',39,0 |
err_message_import_1 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libimg.obj',39,0 |
|
system_dir_2 db '/sys/lib/' |
lib_name_2 db 'buf2d.obj',0 |
err_msg_found_lib_2 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'buf2d.obj',39,0 |
err_msg_import_2 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'buf2d',39,0 |
|
system_dir_3 db '/sys/lib/' |
lib_name_3 db 'msgbox.obj',0 |
err_msg_found_lib_3 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'msgbox.obj',39,0 |
err_msg_import_3 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'msgbox',39,0 |
|
l_libs_start: |
lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\ |
err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i |
lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\ |
err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i |
lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\ |
err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i |
lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\ |
err_msg_found_lib_3,head_f_l,import_msgbox_lib,err_msg_import_3,head_f_i |
l_libs_end: |
|
align 4 |
import_libimg: |
dd alib_init1 |
img_is_img dd aimg_is_img |
img_info dd aimg_info |
img_from_file dd aimg_from_file |
img_to_file dd aimg_to_file |
img_from_rgb dd aimg_from_rgb |
img_to_rgb dd aimg_to_rgb |
img_to_rgb2 dd aimg_to_rgb2 |
img_decode dd aimg_decode |
img_encode dd aimg_encode |
img_create dd aimg_create |
img_destroy dd aimg_destroy |
img_destroy_layer dd aimg_destroy_layer |
img_count dd aimg_count |
img_lock_bits dd aimg_lock_bits |
img_unlock_bits dd aimg_unlock_bits |
img_flip dd aimg_flip |
img_flip_layer dd aimg_flip_layer |
img_rotate dd aimg_rotate |
img_rotate_layer dd aimg_rotate_layer |
img_draw dd aimg_draw |
|
dd 0,0 |
alib_init1 db 'lib_init',0 |
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª ᤥ« âì ¨§ ¨å ¨§®¡à ¦¥¨¥ |
aimg_info db 'img_info',0 |
aimg_from_file db 'img_from_file',0 |
aimg_to_file db 'img_to_file',0 |
aimg_from_rgb db 'img_from_rgb',0 |
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ¨¥ ¨§®¡à ¦¥¨ï ¢ ¤ ë¥ RGB |
aimg_to_rgb2 db 'img_to_rgb2',0 |
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå |
aimg_encode db 'img_encode',0 |
aimg_create db 'img_create',0 |
aimg_destroy db 'img_destroy',0 |
aimg_destroy_layer db 'img_destroy_layer',0 |
aimg_count db 'img_count',0 |
aimg_lock_bits db 'img_lock_bits',0 |
aimg_unlock_bits db 'img_unlock_bits',0 |
aimg_flip db 'img_flip',0 |
aimg_flip_layer db 'img_flip_layer',0 |
aimg_rotate db 'img_rotate',0 |
aimg_rotate_layer db 'img_rotate_layer',0 |
aimg_draw db 'img_draw',0 |
|
align 4 |
proclib_import: ;®¯¨á ¨¥ íªá¯®àâ¨à㥬ëå äãªæ¨© |
OpenDialog_Init dd aOpenDialog_Init |
OpenDialog_Start dd aOpenDialog_Start |
dd 0,0 |
aOpenDialog_Init db 'OpenDialog_init',0 |
aOpenDialog_Start db 'OpenDialog_start',0 |
|
align 4 |
import_buf2d: |
init dd sz_init |
buf2d_create dd sz_buf2d_create |
buf2d_create_f_img dd sz_buf2d_create_f_img |
buf2d_clear dd sz_buf2d_clear |
buf2d_draw dd sz_buf2d_draw |
buf2d_delete dd sz_buf2d_delete |
buf2d_resize dd sz_buf2d_resize |
buf2d_line dd sz_buf2d_line |
buf2d_rect_by_size dd sz_buf2d_rect_by_size |
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size |
buf2d_circle dd sz_buf2d_circle |
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 |
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 |
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 |
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 |
buf2d_bit_blt dd sz_buf2d_bit_blt |
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp |
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha |
buf2d_curve_bezier dd sz_buf2d_curve_bezier |
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix |
buf2d_draw_text dd sz_buf2d_draw_text |
buf2d_crop_color dd sz_buf2d_crop_color |
buf2d_offset_h dd sz_buf2d_offset_h |
buf2d_flood_fill dd sz_buf2d_flood_fill |
buf2d_set_pixel dd sz_buf2d_set_pixel |
buf2d_get_pixel dd sz_buf2d_get_pixel |
buf2d_vox_brush_create dd sz_buf2d_vox_brush_create |
buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete |
buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g |
buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g |
buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g |
buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g |
buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled |
buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows |
buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl |
buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled |
dd 0,0 |
sz_init db 'lib_init',0 |
sz_buf2d_create db 'buf2d_create',0 |
sz_buf2d_create_f_img db 'buf2d_create_f_img',0 |
sz_buf2d_clear db 'buf2d_clear',0 |
sz_buf2d_draw db 'buf2d_draw',0 |
sz_buf2d_delete db 'buf2d_delete',0 |
sz_buf2d_resize db 'buf2d_resize',0 |
sz_buf2d_line db 'buf2d_line',0 |
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 |
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 |
sz_buf2d_circle db 'buf2d_circle',0 |
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 |
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 |
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 |
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 |
sz_buf2d_bit_blt db 'buf2d_bit_blt',0 |
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 |
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 |
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 |
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 |
sz_buf2d_draw_text db 'buf2d_draw_text',0 |
sz_buf2d_crop_color db 'buf2d_crop_color',0 |
sz_buf2d_offset_h db 'buf2d_offset_h',0 |
sz_buf2d_flood_fill db 'buf2d_flood_fill',0 |
sz_buf2d_set_pixel db 'buf2d_set_pixel',0 |
sz_buf2d_get_pixel db 'buf2d_get_pixel',0 |
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0 |
sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0 |
sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0 |
sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0 |
sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0 |
sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0 |
sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0 |
sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 |
sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0 |
sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0 |
|
align 4 |
import_msgbox_lib: |
mb_create dd amb_create |
; mb_reinit dd amb_reinit |
; mb_setfunctions dd amb_setfunctions |
dd 0,0 |
amb_create db 'mb_create',0 |
; amb_reinit db 'mb_reinit',0 |
; amb_setfunctions db 'mb_setfunctions',0 |
|
mouse_dd dd 0x0 |
sc system_colors |
last_time dd 0 |
|
align 16 |
procinfo process_information |
|
align 4 |
buf_0: dd 0 |
dw 5 ;+4 left |
dw 35 ;+6 top |
.w: dd 6*64 ;+8 w |
.h: dd 7*64 ;+12 h |
.color: dd 0xffffff ;+16 color |
db 24 ;+20 bit in pixel |
|
align 4 |
buf_0z: dd 0 |
dw 5 ;+4 left |
dw 35 ;+6 top |
.w: dd 6*64 ;+8 w |
.h: dd 7*64 ;+12 h |
.color: dd 0 ;+16 color |
db 32 ;+20 bit in pixel |
|
align 4 |
buf_i0: dd 0 |
dw 5 ;+4 left |
dw 35 ;+6 top |
.w: dd 0 ;+8 w |
.h: dd 0 ;+12 h |
.color: dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
|
align 4 |
buf_i1: dd 0 |
dw 105 ;+4 left |
dw 35 ;+6 top |
.w: dd 0 ;+8 w |
.h: dd 0 ;+12 h |
.color: dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
|
align 4 |
buf_i2: dd 0 |
dw 205 ;+4 left |
dw 35 ;+6 top |
.w: dd 0 ;+8 w |
.h: dd 0 ;+12 h |
.color: dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
|
align 4 |
buf_npl_p: dd 0 |
dw 0 ;+4 left |
dw 0 ;+6 top |
.w: dd 0 ;+8 w |
.h: dd 0 ;+12 h |
.color: dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
|
align 4 |
buf_npl: dd 0 |
dw 5 ;+4 left |
dw 35 ;+6 top |
.w: dd 0 ;+8 w |
.h: dd 0 ;+12 h |
.color: dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
|
align 4 |
buf_npl_n: dd 0 |
dw 0 ;+4 left |
dw 0 ;+6 top |
.w: dd 0 ;+8 w |
.h: dd 0 ;+12 h |
.color: dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
|
;¤ ë¥ ¤«ï ᮧ¤ ¨ï ¬¨¨¬ «ì®£® ¥¤¨¨ç®£® ¢®ªá¥«ï |
align 4 |
vox_6_7_z: |
dd 0,0,1,1,0,0,\ |
0,2,2,2,2,0,\ |
2,2,2,2,2,2,\ |
2,3,2,2,3,2,\ |
2,3,3,3,3,2,\ |
0,3,3,3,3,0,\ |
0,0,3,3,0,0 |
|
align 4 |
buf_vox: |
db 6,7,4,3 ;w,h,h_osn,n |
rb BUF_STRUCT_SIZE*(2+1) |
|
|
|
;íâ®â ª®¤ ¥ ¬®©, ® ¯à¥®¡à §ã¥â ç¨á«® ¢ áâபã |
;input: |
; eax = value |
; edi = string buffer |
;output: |
align 4 |
tl_convert_to_str: |
pushad |
mov dword[edi+1],0 |
call .str |
popad |
ret |
|
align 4 |
.str: |
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬ áç¨á«¥¨ï ¨§¬¥ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤ë¥ ¯ à ¬¥âàë eax - ç¨á«® |
;¯à¥à¥¢®¤ ç¨á« ¢ ASCII áâப㠢§®¤ë¥ ¤ ë¥ ecx=á¨á⥬ áç¨á«¥ï edi ¤à¥á ªã¤ § ¯¨áë¢ âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®¥æ ¯¥à¥¬¥®© |
cmp eax,ecx ;áà ¢¨âì ¥á«¨ ¢ eax ¬¥ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ @@-1 â.¥. pop eax |
jb @f |
xor edx,edx ;®ç¨áâ¨âì edx |
div ecx ;à §¤¥«¨âì - ®áâ ⮪ ¢ edx |
push edx ;¯®«®¦¨âì ¢ á⥪ |
;dec edi ;ᬥ饨¥ ¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®æ áâப¨ |
call .str ;¯¥à¥©â¨ á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥â ¯®ª ¢ eax ¥ á⠥⠬¥ìè¥ ç¥¬ ¢ ecx |
pop eax |
@@: ;cmp al,10 ;¯à®¢¥à¨âì ¥ ¬¥ìè¥ «¨ § 票¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥ï 10 ¤ ï ª®¬ ¤ - «¨è ï)) |
or al,0x30 ;¤ ï ª®¬ ¤ ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥ |
stosb ;§ ¯¨á âì í«¥¬¥â ¨§ ॣ¨áâà al ¢ ï祪㠯 ¬ï⨠es:edi |
ret ;¢¥àãâìáï ç¥ì ¨â¥à¥áë© å®¤ â.ª. ¯®ª ¢ á⥪¥ åà ¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï |
|
i_end: |
rb 1024 |
thread: |
rb 1024 |
stacktop: |
sys_path rb 1024 |
file_name: |
rb 1024 ;4096 |
library_path rb 1024 |
plugin_path rb 4096 |
openfile_path rb 4096 |
filename_area rb 256 |
mem: |