1,10 → 1,11 |
use32 |
org 0x0 |
db 'MENUET01' ;¨¤¥â¨ä. ¨á¯®«ï¥¬®£® ä ©« ¢á¥£¤ 8 ¡ ©â |
dd 1, start, i_end, mem, stacktop, 0, sys_path |
dd 1, start, i_end, mem, stacktop, file_name, sys_path |
|
include '../../macros.inc' |
include '../../proc32.inc' |
include '../../kosfuncs.inc' |
include '../../develop/libraries/box_lib/load_lib.mac' |
include '../../develop/libraries/box_lib/trunk/box_lib.mac' |
include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' |
55,7 → 56,7 |
TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;à §¬¥à bmp ä ©« á á¨á⥬묨 ¨ª®ª ¬¨ |
icon_tl_sys dd 0 ;㪠§ ⥥«ì ¯ ¬ïâì ¤«ï åà ¥¨ï á¨á⥬ëå ¨ª®®ª |
icon_toolbar dd 0 ;㪠§ ⥥«ì ¯ ¬ïâì ¤«ï åà ¥¨ï ¨ª®®ª ®¡ê¥ªâ®¢ |
IMAGE_CHUNKS_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*10+54 ;à §¬¥à bmp ä ©« á ¨ª®ª ¬¨ ®¡ê¥ªâ®¢ |
IMAGE_CHUNKS_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*12+54 ;à §¬¥à bmp ä ©« á ¨ª®ª ¬¨ ®¡ê¥ªâ®¢ |
; |
IMAGE_FILE1_SIZE equ 128*144*3+54 ;à §¬¥à ä ©« á ¨§®¡à ¦¥¨¥¬ |
|
76,7 → 77,7 |
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï |
mov [buf],eax |
|
mov [run_file_70.Function], 0 |
mov [run_file_70.Function], SSF_READ_FILE |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov [run_file_70.Count], dword size |
83,7 → 84,7 |
mov [run_file_70.Buffer], eax |
mov byte[run_file_70+20], 0 |
mov [run_file_70.FileName], file_name |
mcall 70,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
mcall SF_FILE,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je @f |
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥ë© ¡ãä¥à image_data |
120,6 → 121,18 |
|
align 4 |
start: |
;--- copy cmd line --- |
mov esi,file_name |
mov edi,openfile_path |
@@: |
lodsd |
cmp eax,0 |
je @f ;¢ë室, ¥á«¨ 0 |
stosd |
jmp @b |
@@: |
stosd |
|
load_libraries l_libs_start,l_libs_end |
;¯à®¢¥àª ᪮«ìª® ã¤ ç® § £ã§¨«¨áì ¡¨¡«¨®â¥ª¨ |
mov ebp,lib_0 |
126,13 → 139,14 |
.test_lib_open: |
cmp dword [ebp+ll_struc_size-4],0 |
jz @f |
mcall -1 ;exit not correct |
mcall SF_TERMINATE_PROCESS ;exit not correct |
@@: |
add ebp,ll_struc_size |
cmp ebp,l_libs_end |
jl .test_lib_open |
mcall 48,3,sc,sizeof.sys_colors_new |
mcall 40,0x27 |
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.sys_colors_new |
mcall SF_SET_EVENTS_MASK,0x27 |
|
stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª ¤¨ «®£ |
|
;kmenu initialisation |
255,7 → 269,7 |
fdiv dword[fl255] |
fstp dword[color_bk] |
|
mcall 26,9 |
mcall SF_SYSTEM_GET,SSF_TIME_COUNT |
mov [last_time],eax |
|
stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,3d_wnd_w,3d_wnd_h,ctx1 |
266,11 → 280,21 |
stdcall [gluNewQuadric] |
mov [qObj],eax |
|
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext |
mov eax,[eax] ;eax -> ZBuffer |
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf |
mov dword[buf_ogl],eax |
|
;open file from cmd line |
cmp dword[openfile_path],0 |
je @f |
call but_open_file.no_dlg |
@@: |
call draw_window |
|
align 4 |
still: |
mcall 26,9 |
mcall SF_SYSTEM_GET,SSF_TIME_COUNT |
mov ebx,[last_time] |
add ebx,10 ;§ ¤¥à¦ª |
cmp ebx,eax |
278,7 → 302,7 |
mov ebx,eax |
@@: |
sub ebx,eax |
mcall 23 |
mcall SF_WAIT_EVENT_TIMEOUT |
cmp eax,0 |
je timer_funct |
|
293,7 → 317,7 |
jz button |
cmp al,6 |
jne @f |
mcall 9,procinfo,-1 |
mcall SF_THREAD_INFO,procinfo,-1 |
cmp ax,word[procinfo+4] |
jne @f ;®ª® ¥ ªâ¨¢® |
call mouse |
308,7 → 332,7 |
align 4 |
timer_funct: |
pushad |
mcall 26,9 |
mcall SF_SYSTEM_GET,SSF_TIME_COUNT |
mov [last_time],eax |
|
;¯à®á¬ âਢ ¥¬ ¢ë¤¥«¥ë© ¡«®ª ¤ ëå |
316,7 → 340,7 |
cmp eax,0 |
je @f |
mov ebx,eax |
mov eax,dword[ebx] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª ®â®á¨â¥«ì® ç « ä ©« |
mov eax,dword[ebx] |
mov ecx,dword[ebx+4] ;à §¬¥à ¡«®ª |
stdcall hex_in_str, txt_3ds_offs.dig, eax,8 |
stdcall hex_in_str, txt_3ds_offs.siz, ecx,8 |
326,7 → 350,7 |
je @f |
;¥á«¨ ¢ë¤¥«¥ë© ¡«®ª ¤ ëå ¥ ᮢ¯ ¤ ¥â á ¯®á«¥¤¨¬ § ¯®¬¥ë¬ |
mov dword[offs_last_timer],eax |
call buf_draw_beg |
stdcall buf_draw_beg, buf_0 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000 |
mov edx,dword[ebx+list_offs_p_data] |
cmp edx,0 ;ᬮâਬ ¥áâì «¨ ®¯¨á ¨¥ ¡«®ª |
341,17 → 365,6 |
jmp still |
|
align 4 |
buf_draw_beg: |
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_open_3ds,5,5,0xff |
stdcall [buf2d_draw_text], buf_0, buf_1,openfile_path,5,15,0xff |
cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦ ®è¨¡ª ä ©« |
jne @f |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_err_sizes,5,25,0xff0000 |
@@: |
ret |
|
align 4 |
proc buf_draw_hex_table, offs:dword, size_line:dword |
pushad |
locals |
408,7 → 421,7 |
align 4 |
draw_window: |
pushad |
mcall 12,1 |
mcall SF_REDRAW,SSF_BEGIN_DRAW |
xor eax,eax |
mov edx,[sc.work] |
or edx,0x33000000 |
415,7 → 428,7 |
mov edi,capt |
mcall , (20 shl 16)+560, (20 shl 16)+main_wnd_height |
|
mcall 9,procinfo,-1 |
mcall SF_THREAD_INFO,procinfo,-1 |
mov eax,dword[procinfo.box.height] |
cmp eax,250 |
jge @f |
444,23 → 457,17 |
mov word[buf_0.l],ax |
|
mov esi,[sc.work_button] |
mcall 8,(5 shl 16)+20,(5 shl 16)+20,3 |
mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(5 shl 16)+20,3 |
mcall ,(30 shl 16)+20,,4 |
|
mov ebx,(30 shl 16)+20 |
mov edx,4 |
int 0x40 |
|
cmp byte[can_save],0 |
je @f |
mov ebx,(55 shl 16)+20 |
mov edx,5 |
int 0x40 |
mcall ,(55 shl 16)+20,,5 |
@@: |
|
mcall ,(85 shl 16)+20,,6 ;®ª® á ª®®à¤¨ â ¬¨ |
mcall ,(110 shl 16)+20,,7 ;㤠«¥¨¥ ¡«®ª |
|
mcall 7,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new |
mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new |
|
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
mov edx,(32 shl 16)+7 ;open |
487,13 → 494,13 |
|
stdcall [buf2d_draw], buf_0 |
|
mcall 12,2 |
mcall SF_REDRAW,SSF_END_DRAW |
popad |
ret |
|
align 4 |
key: |
mcall 2 |
mcall SF_GET_KEY |
stdcall [tl_key], dword tree1 |
jmp still |
|
500,7 → 507,7 |
|
align 4 |
button: |
mcall 17 |
mcall SF_GET_BUTTON |
cmp ah,3 |
jne @f |
call but_new_file |
538,7 → 545,7 |
stdcall mem.Free,[image_data_toolbar] |
stdcall mem.Free,[open_file_data] |
stdcall [gluDeleteQuadric], [qObj] |
mcall -1 |
mcall SF_TERMINATE_PROCESS |
|
|
align 4 |
559,8 → 566,11 |
cmp [OpenDialog_data.status],2 |
je .end_open_file |
;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
|
mov [run_file_70.Function], 5 |
jmp @f |
.no_dlg: ;¥á«¨ ¬¨ã¥¬ ¤¨ «®£ ®âªàëâ¨ï ä ©« |
pushad |
@@: |
mov [run_file_70.Function], SSF_GET_INFO |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov dword[run_file_70.Count], 0 |
567,13 → 577,13 |
mov dword[run_file_70.Buffer], open_b |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mcall 70,run_file_70 |
mcall SF_FILE,run_file_70 |
|
mov ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©« ¢ ¡ ©â å |
stdcall mem.ReAlloc,[open_file_data],ecx |
mov [open_file_data],eax |
|
mov [run_file_70.Function], 0 |
mov [run_file_70.Function], SSF_READ_FILE |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov dword[run_file_70.Count], ecx |
580,12 → 590,12 |
m2m dword[run_file_70.Buffer], dword[open_file_data] |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mcall 70,run_file_70 ;§ £à㦠¥¬ ä ©« 3ds |
mcall SF_FILE,run_file_70 ;§ £à㦠¥¬ ä ©« 3ds |
cmp ebx,0xffffffff |
je .end_open_file |
|
mov [open_file_size],ebx |
;mcall 71,1,openfile_path |
;mcall SF_SET_CAPTION,1,openfile_path |
|
mov byte[can_save],0 |
call init_tree |
608,7 → 618,7 |
mov esi,dword[open_file_data] |
cmp word[esi],CHUNK_MAIN |
je @f |
call buf_draw_beg |
stdcall buf_draw_beg, buf_0 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_no_3ds,5,25,0xff0000 ;à¨á㥬 áâபã á ⥪á⮬ |
jmp .end_open |
@@: |
659,6 → 669,7 |
|
; «¨§ ¤ ëå ¡«®ª |
;input: |
; eax - stack pointer |
; esi - memory pointer |
;output: |
; eax - new stack pointer |
716,11 → 727,16 |
sub ecx,eax |
cmp ecx,1 |
jl .data_3 ;¯à®¢¥à塞 ¥áâì «¨ ¡«®ª ®¯¨áë¢ î騩 ¬ â¥à¨ «, ¯à¨¬¥ï¥¬ë© ª ®¡ê¥ªâã |
if 0 |
add esi,eax |
mov ecx,dword[esi+2] |
stdcall add_3ds_object, 10,ebx,ecx,0 ;¤ ë¥ ¬ â¥à¨ « |
sub esi,eax |
else |
add esi,eax |
pop eax |
jmp .next_bl |
;stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;¤ ë¥ ¬ â¥à¨ « |
;sub esi,eax ;¢®ááâ ®¢«¥¨¥ esi |
end if |
.data_3: |
|
sub esi,8 ;¢®ááâ ®¢«¥¨¥ esi |
929,32 → 945,6 |
ret |
|
align 4 |
proc hex_in_str, buf:dword,val:dword,zif:dword |
pushad |
mov edi,dword[buf] |
mov ecx,dword[zif] |
add edi,ecx |
dec edi |
mov ebx,dword[val] |
|
.cycle: |
mov al,bl |
and al,0xf |
cmp al,10 |
jl @f |
add al,'a'-'0'-10 |
@@: |
add al,'0' |
mov byte[edi],al |
dec edi |
shr ebx,4 |
loop .cycle |
|
popad |
ret |
endp |
|
align 4 |
but_save_file: |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
964,7 → 954,7 |
je .end_save_file |
;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
|
mov [run_file_70.Function], 2 |
mov [run_file_70.Function], SSF_CREATE_FILE |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov ebx, dword[open_file_data] |
973,7 → 963,7 |
mov dword[run_file_70.Count], ebx ;à §¬¥à ä ©« |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mcall 70,run_file_70 |
mcall SF_FILE,run_file_70 |
cmp ebx,0xffffffff |
je .end_save_file |
;...á®®¡é¥¨¥... |
986,7 → 976,7 |
cmp byte[prop_wnd_run],0 |
jne @f |
pushad |
mcall 51,1,prop_start,thread_coords |
mcall SF_CREATE_THREAD,1,prop_start,thread_coords |
popad |
@@: |
ret |
1006,7 → 996,7 |
mov edx,dword[eax+4] ;à §¬¥à ¡«®ª |
sub [open_file_size],edx ;¨§¬¥¥¨¥ à §¬¥à®¢ ä ©« |
mov ecx,[open_file_size] |
mov ebx,dword[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª ®â®á¨â¥«ì® ç « ä ©« |
mov ebx,dword[eax] |
sub ecx,ebx ;ecx - à §¬¥à ¨¦¥© ᤢ¨£ ¥¬®© ç áâ¨ ä ©« |
add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ï⨠|
mov edi,ebx |
1429,9 → 1419,9 |
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; à ¬¥âàë ä®®¢®£® ®á¢¥é¥¨ï |
|
if lang eq ru |
capt db 'info 3ds ¢¥àá¨ï 16.01.16',0 ;¯®¤¯¨áì ®ª |
capt db 'info 3ds ¢¥àá¨ï 19.01.16',0 ;¯®¤¯¨áì ®ª |
else |
capt db 'info 3ds version 16.01.16',0 ;window caption |
capt db 'info 3ds version 19.01.16',0 ;window caption |
end if |
|
align 16 |