Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 2164 → Rev 2165

/programs/develop/info3ds/data.inc
1,7 → 1,7
if lang eq ru
capt db 'info 3ds ¢¥àá¨ï 30.08.11',0 ;¯®¤¯¨áì ®ª­ 
capt db 'info 3ds ¢¥àá¨ï 09.09.11',0 ;¯®¤¯¨áì ®ª­ 
else
capt db 'info 3ds version 30.08.11',0 ;window caption
capt db 'info 3ds version 09.09.11',0 ;window caption
end if
 
MAX_FILE_LEVEL equ 20 ;¬ ªá¨¬ «ì­ë© ã஢¥­ì ¢«®¦¥­­®á⨠¡«®ª®¢ ¤«ï  ­ «¨§ 
/programs/develop/info3ds/doc/i3d_110823.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/develop/info3ds/doc/i3d_110909.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/develop/info3ds/doc/readme.htm
0,0 → 1,55
<html>
<head>
<title>Info 3ds</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<style>
body
{
font-size: 15px;
font-family: "Bookman Old Style";
color: black;
text-align: justify;
width: 750px;
}
h1 {
color: white;
background-color: 808080;
font-size: 25px;
text-align: center;
}
h2 { color: green; font-size: 21px; }
h3 { color: green; font-size: 19px; }
h4 { color: #803f00; font-size: 17px; }
i { color: #0099cc; }
b { color: #0099cc; }
p {
text-indent: 2em;
margin-top: 3px;
margin-bottom: 2px;
margin-left: 0px;
margin-right: 0px;
}
ol, ul, dl{
margin-top: 3px;
margin-bottom: 2px;
}
</style>
</head>
<body>
<h1>Info 3ds</h1>
<p><b>Info3ds</b> - ïðîãðàììà ïðîñìîòðà ñòðóêòóðû ôàéëîâ ôîðìàòà <b>*.3ds</b>. Âñå ôàéëû <b>*.3ds</b> ñîñòîÿò èç îïðåäåëåííûõ áëîêîâ, â êîòîðûõ íàõîäèòñÿ èíôîðìàöèÿ î îáúåêòàõ ñöåíû.  ïðîãðàììå ñëåâà â âèäå äåðåâà ïîêàçàíà ñòðóêòóðà áëîêîâ â ôàéëå, à ñïðàâà âûáðàííûé áëîê ïîêàçûâàåòñÿ â øåñòíàäöàòåðè÷íîì âèäå. Äëÿ ïðîñìîòðà ýòèõ ôàéëîâ â 3-õ ìåðíîì âèäå èñïîëüçóéòå ïðîãðàììó <i>View3ds</i>.</p>
 
<img src="i3d_110823.png">
<p>Ðèñ. 1. Âíåøíèé âèä ïðîãðàììû</p>
 
<p>Êîîðäèíàòû âåðøèí îáúåêòà ìîæíî ïðîñìàòðèâàòü â âèäå äðîáíûõ ÷èñåë. Äëÿ ïðîñìîòðà êîîðäèíàò íóæíî (ñì. ðèñ. 2):</p>
<p>1) âåäåëèòü áëîê ñ êîäîì <b>4110</b> (â ðóññêîé âåðñèè ïîäïèñàí êàê <b>Ñïèñîê âåðøèí</b>),</p>
<p>2) íàæàòü êíîïêó íà ïàíåëè èíñòðóìåíòîâ.</p>
<img src="i3d_110909.png">
<p>Ðèñ. 2. Ïðîñìîòð êîîðäèíàò âåðøèí îáúåêòà</p>
 
<h2>Àâòîð</h2>
<p>IgorA</p>
 
</body>
</html>
/programs/develop/info3ds/doc
Property changes:
Added: bugtraq:number
+true
\ No newline at end of property
Added: tsvn:logminsize
+5
\ No newline at end of property
/programs/develop/info3ds/info3ds.asm
16,6 → 16,7
include 'mem.inc'
include 'dll.inc'
include 'lang.inc'
include 'info_fun_float.inc'
 
debug equ 0
 
112,6 → 113,7
txt_3ds_symb db 0,0
;--------------------------------------
 
include 'info_wnd_coords.inc'
 
align 4
start:
361,6 → 363,10
;mov edx,5
;int 0x40
 
mov ebx,(85 shl 16)+20
mov ecx,(5 shl 16)+20
mov edx,6 ;®ª­® á ª®®à¤¨­ â ¬¨
int 0x40
 
mov eax,7
mov ebx,[image_data_toolbar]
407,6 → 413,10
jne @f
call but_save_file
@@:
cmp ah,6
jne @f
call but_wnd_coords
@@:
 
cmp ah,1
jne still
808,6 → 818,15
end if
ret
 
align 4
but_wnd_coords:
cmp byte[prop_wnd_run],0
jne @f
pushad
mcall 51,1,prop_start,thread_coords
popad
@@:
ret
 
 
;input:
1223,6 → 1242,8
 
i_end:
rb 1024
thread_coords:
rb 1024
stacktop:
sys_path rb 1024
file_name:
/programs/develop/info3ds/info_fun_float.inc
0,0 → 1,324
;
; ä㭪樨 ¤«ï à ¡®âë á ç¨á« ¬¨ float
;
 
; Š®«¨ç¥á⢮ §­ ª®¢ ç¨á«  ¯®á«¥ § ¯ï⮩ (1-17)
NumberSymbolsAD DW 5
; Š®­áâ ­âë (10 ¢ á⥯¥­¨ N)
MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5
DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10
DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15
DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20
DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25
DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30
DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35
DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40
DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45
DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50
DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55
DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60
DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65
DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70
DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75
DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80
DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85
DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90
DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95
DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100
DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105
DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110
DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115
DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120
DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125
DQ 1.0E126,1.0E127,1.0E128
; —¨á«® á ¯« ¢ î饩 § ¯ï⮩ ¤¢®©­®© â®ç­®áâ¨
Data_Double DQ ?
; —¨á«® ¢ BCD-ä®à¬ â¥
Data_BCD DT ?
; ‚ᯮ¬®£ â¥«ì­ë© ä« £
Data_Flag DB ?
; ‡­ ª १ã«ìâ â  (¥á«¨ ­¥ 0 - ®âà¨æ â¥«ì­®¥ ç¨á«®)
Data_Sign DB ?
 
 
db 0 ;㪠§ â¥«ì ­  ᤢ¨£ ¢ ¯ ¬ïâ¨
; ‘âப  ¤«ï åà ­¥­¨ï ç¨á«  ¢ ª®¤¥ ASCII
Data_String DB 32 DUP (?)
 
 
 
;*******************************************************
;* …Ž€‡Ž‚€ˆ… —ˆ‘‹€ ‘ ‹€‚€ž™…‰ ‡€Ÿ’Ž‰ ‚ ‘’ŽŠ“ *
;* —¨á«® ¨¬¥¥â ä®à¬ â á 㤢®¥­­®© â®ç­®áâìî, १ã«ìâ â *
;* ¢ë¤ ¥âáï ¢ ¤¥áïâ¨ç­®¬ ª®¤¥, ¢ "¡ë⮢®¬" ä®à¬ â¥ á *
;* 䨪á¨à®¢ ­­ë¬ ª®«¨ç¥á⢮¬ §­ ª®¢ ¯®á«¥ § ¯ï⮩. *
;* ‚室­ë¥ ¯ à ¬¥âàë: *
;* Data_Double - ¯à¥®¡à §ã¥¬®¥ ç¨á«®; *
;* NumberSymbolsAD - ª®«¨ç¥á⢮ §­ ª®¢ ¯®á«¥ *
;* § ¯ï⮩ (0-17). *
;* ‚ë室­ë¥ ¯ à ¬¥âàë: *
;* Data_String - áâப -१ã«ìâ â. *
;*******************************************************
DoubleFloat_to_String:
pushad
; ¥§ã«ìâ â § ¯¨á뢠âì ¢ áâபã Data_String
mov EDI, Data_String
 
; ‘¤¢¨£ ¥¬ ç¨á«® ¢«¥¢® ­  NumberSymbolsAD
; ¤¥áïâ¨ç­ëå à §à冷¢
fninit ;á¡à®á ᮯà®æ¥áá®à 
fld [Data_Double] ;§ £à㧨âì ç¨á«®
xor ebx,ebx
mov BX,[NumberSymbolsAD]
cmp BX, 0
je .NoShifts ;­¥â æ¨äà ¯®á«¥ § ¯ï⮩
jl .Error ;®è¨¡ª 
dec BX
shl BX, 3 ;㬭®¦ ¥¬ ­  8
add EBX, MConst
fmul qword [EBX] ;㬭®¦¨âì ­  ª®­áâ ­âã
.NoShifts:
; ˆ§¢«¥çì ç¨á«® ¢ ª®¤¥ BCD
fbstp [Data_BCD]
; à®¢¥à¨âì १ã«ìâ â ­  ¯¥à¥¯®«­¥­¨¥
mov AX,word [Data_BCD + 8]
cmp AX,0FFFFh ;"¤¥áïâ¨ç­®¥" ¯¥à¥¯®«­¥­¨¥?
je .Overflow
; ‚뤥«¨âì §­ ª ç¨á«  ¨ § ¯¨á âì ¥£® ¢ ASCII-ª®¤¥
mov AL, byte [Data_BCD + 9]
and AL,AL
jz .NoSign
mov AL,'-'
stosb
.NoSign:
;  á¯ ª®¢ âì ç¨á«® ¢ ª®¤ ASCII
mov BX,8 ;ᬥ饭¨¥ ¯®á«¥¤­¥© ¯ àë æ¨äà
mov ecx,9 ;áç¥â稪 ¯ à æ¨äà
; Ž¯à¥¤¥«¨âì ¯®§¨æ¨î ¤¥áïâ¨ç­®© â®çª¨ ¢ ç¨á«¥
mov DX,18
sub DX,[NumberSymbolsAD]
js .Error ;®è¨¡ª , ¥á«¨ ®âà¨æ â¥«ì­ ï
jz .Error ;¨«¨ ­ã«¥¢ ï ¯®§¨æ¨ï
.NextPair:
; ‡ £à㧨âì ®ç¥à¥¤­ãî ¯ àã à §à冷¢
mov AL, byte [BX + Data_BCD]
mov AH,AL
; ‚뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨
; á®åà ­¨âì áâ àèãî â¥âà ¤ã
shr AL,4
add AL,'0'
stosb
dec DX
jnz .N0
mov AL,'.'
stosb
.N0: ; ‚뤥«¨âì, ¯¥à¥¢¥á⨠¢ ASCII ¨
; á®åà ­¨âì ¬« ¤èãî â¥âà ¤ã
mov AL,AH
and AL,0Fh
add AL,'0'
stosb
dec DX
jnz .N1
mov AL,'.'
stosb
.N1:
dec BX
loop .NextPair
mov AL,0
stosb
 
; “¡à âì ­¥§­ ç é¨¥ ­ã«¨ á«¥¢ 
mov EDI, Data_String
mov ESI, Data_String
; à®¯ãáâ¨âì §­ ª ç¨á« , ¥á«¨ ®­ ¥áâì
cmp byte [ESI],'-'
jne .N2
inc ESI
inc EDI
.N2: ; ‡ £à㧨âì ¢ áç¥â稪 横«  ª®«¨ç¥á⢮ à §à冷¢
; ç¨á«  ¯«îá 1 (¡ ©â ¤¥áïâ¨ç­®© â®çª¨)
mov ecx,18+1+1
; à®¯ãáâ¨âì ­¥§­ ç é¨¥ ­ã«¨
.N3:
cmp byte [ESI],'0'
jne .N4
cmp byte [ESI+1],'.'
je .N4
inc ESI
loop .N3
; Žè¨¡ª  - ­¥â §­ ç é¨å æ¨äà
jmp .Error
; ‘ª®¯¨à®¢ âì §­ ç éãî ç áâì ç¨á«  ¢ ­ ç «® áâப¨
.N4: rep movsb
jmp .End
 
; Žè¨¡ª 
.Error:
mov AL,'E'
stosb
mov AL,'R'
stosb
mov AL,'R'
stosb
xor AL,AL
stosb
jmp .End
; ¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
.Overflow:
mov AL,'#'
stosb
xor AL,AL
stosb
; Š®­¥æ ¯à®æ¥¤ãàë
.End:
popad
ret
 
;****************************************************
;* …Ž€‡Ž‚€’œ ‘’ŽŠ“ ‚ —ˆ‘‹Ž ‘ ‹€‚€ž™…‰ ‡€Ÿ’Ž‰ *
;* (ç¨á«® ¨¬¥¥â ®¡ëç­ë©, "¡ë⮢®©" ä®à¬ â) *
;* ‚室­ë¥ ¯ à ¬¥âàë: *
;* Data_String - ç¨á«® ¢ ª®¤¥ ASCII. *
;* ‚ë室­ë¥ ¯ à ¬¥âàë: *
;* Data_Double - ç¨á«® ¢ ¤¢®¨ç­®¬ ª®¤¥. *
;****************************************************
String_to_DoubleFloat:
pushad
cld
; Žç¨é ¥¬ Data_BCD
mov dword [Data_BCD],0
mov dword [Data_BCD+4],0
mov word [Data_BCD+8],0
; Žç¨é ¥¬ ¡ ©â §­ ª 
mov [Data_Sign],0
; ‡ ­®á¨¬ ¢ SI 㪠§ â¥«ì ­  áâபã
mov ESI, Data_String
; à®¯ã᪠¥¬ ¯à®¡¥«ë ¯¥à¥¤ ç¨á«®¬
mov ecx,64 ;§ é¨â  ®â § æ¨ª«¨¢ ­¨ï
.ShiftIgnore:
lodsb
cmp AL,' '
jne .ShiftIgnoreEnd
loop .ShiftIgnore
jmp .Error
.ShiftIgnoreEnd:
; à®¢¥à塞 §­ ª ç¨á« 
cmp AL,'-'
jne .Positive
mov [Data_Sign],80h
lodsb
.Positive:
mov [Data_Flag],0 ;¯à¨§­ ª ­ «¨ç¨ï â®çª¨
mov DX,0 ;¯®§¨æ¨ï â®çª¨
mov ecx,18 ;¬ ªá. ç¨á«® à §à冷¢
.ASCIItoBCDConversion:
cmp AL,'.' ;â®çª ?
jne .NotDot
cmp [Data_Flag],0 ;â®çª  ­¥ ¢áâà¥ç « áì?
jne .Error
mov [Data_Flag],1
lodsb
cmp AL,0 ;ª®­¥æ áâப¨?
jne .NotDot
jmp .ASCIItoBCDConversionEnd
.NotDot:
; “¢¥«¨ç¨âì ­  1 §­ ç¥­¨¥ ¯®§¨æ¨¨ â®çª¨,
; ¥á«¨ ®­  ¥é¥ ­¥ ¢áâà¥ç « áì
cmp [Data_Flag],0
jnz .Figures
inc DX
.Figures:
; ‘¨¬¢®«ë ç¨á«  ¤®«¦­ë ¡ëâì æ¨äà ¬¨
cmp AL,'0'
jb .Error
cmp AL,'9'
ja .Error
; ¨è¥¬ ®ç¥à¥¤­ãî æ¨äàã ¢ ¬« ¤èãî â¥âà ¤ã BCD
and AL,0Fh
or byte [Data_BCD],AL
; à®¢¥àª  ­  ª®­¥æ áâப¨
cmp byte [ESI],0
je .ASCIItoBCDConversionEnd
; ‘¤¢¨£ ¥¬ BCD ­  4 à §à鸞 ¢«¥¢®
; (ᤢ¨£ ¥¬ áâ à訥 2 ¡ ©â )
mov AX,word [Data_BCD+6]
shld word [Data_BCD+8],AX,4
; (ᤢ¨£ ¥¬ á।­¨¥ 4 ¡ ©â )
mov EAX, dword [Data_BCD]
shld dword [Data_BCD+4],EAX,4
; (ᤢ¨£ ¥¬ ¬« ¤è¨¥ 4 ¡ ©â )
shl dword [Data_BCD],4
; ‡ £à㦠¥¬ á«¥¤ãî騩 ᨬ¢®« ¢ AL
lodsb
loop .ASCIItoBCDConversion
; …᫨ 19-© ᨬ¢®« ­¥ 0 ¨ ­¥ â®çª ,
; â® ®è¨¡ª  ¯¥à¥¯®«­¥­¨ï
cmp AL,'.'
jne .NotDot2
inc ecx
lodsb
.NotDot2:
cmp AL,0
jne .Error ;¯¥à¥¯®«­¥­¨¥ à §à來®© á¥âª¨
 
; …Ž€‡Ž‚€’œ —ˆ‘‹Ž ˆ‡ ŠŽ„€ BCD ‚ ‚…™…‘’‚…Ž… —ˆ‘‹Ž
.ASCIItoBCDConversionEnd:
; ‚¯¨á âì §­ ª ¢ áâ à訩 ¡ ©â
mov AL,[Data_Sign]
mov byte [Data_BCD+9],AL
; ‘¡à®á¨âì ॣ¨áâàë ᮯà®æ¥áá®à 
fninit
; ‡ £à㧨âì ¢ ᮯà®æ¥áá®à ç¨á«® ¢ BCD-ä®à¬ â¥
fbld [Data_BCD]
; ‚ëç¨á«¨âì ­®¬¥à ¤¥«¨â¥«ï
mov EBX,18+1
sub BX,CX
sub BX,DX
cmp EBX,0
je .NoDiv
dec EBX
shl EBX,3 ;㬭®¦ ¥¬ ­  8
add EBX, MConst
fdiv qword [EBX] ;à §¤¥«¨âì ­  ª®­áâ ­âã
.NoDiv:; ‚ë£à㧨âì ç¨á«® ¢ ¤¢®¨ç­®¬ ä®à¬ â¥
fstp [Data_Double]
jmp .End
 
.Error:; à¨ «î¡®© ®è¨¡ª¥ ®¡­ã«¨âì १ã«ìâ â
fldz ;§ ­¥á⨠­®«ì á á⥪ ᮯà®æ¥áá®à 
fstp [Data_Double]
.End:
popad
ret
 
align 4
proc str_cat, str1:dword, str2:dword
push eax ecx edi esi
mov esi,dword[str2]
stdcall str_len,esi
mov ecx,eax
inc ecx
mov edi,dword[str1]
stdcall str_len,edi
add edi,eax
cld
repne movsb
pop esi edi ecx eax
ret
endp
 
;output:
; eax = strlen
align 4
proc str_len, str1:dword
mov eax,[str1]
@@:
cmp byte[eax],0
je @f
inc eax
jmp @b
@@:
sub eax,[str1]
ret
endp
/programs/develop/info3ds/info_wnd_coords.inc
0,0 → 1,188
;
; ¢ í⮬ ä ©«¥ ᮡ࠭ë ä㭪樨 ­ã¦­ë¥ ¤«ï ᮧ¤ ­¨ï ¨
; à ¡®âë ®ª­  á ª®®à¤¨­ â ¬¨
;
 
prop_edits_top equ 25
prop_edits_height equ 18
prop_wnd_width equ 350 ;è¨à¨­  ®ª­  ᮠ᢮©á⢠¬¨ ®¡ê¥ªâ 
SIZE_ONE_FLOAT equ 14
MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1)
 
prop_wnd_run db 0 ;¯¥à¥¬¥­­ ï á«¥¤ïé ï §  ⥬ çâ®-¡ë ­¥ § ¯ã᪠âì ¡®«ìè¥ 1-£® ®ª­  ᮠ᢮©á⢠¬¨ ®¤­®¢à¥¬¥­­®
 
txt_space:
db SIZE_ONE_FLOAT dup(' ')
.end:
db 0
 
obj_point: ;¤®¡ ¢«ï¥¬ë© ®¡ê¥ªâ
dd 0 ;㪠§ â¥«ì
.text:
rb MAX_OBJECT_SIZE
 
 
 
;¤ ­®¥ ®ª­® (¯à®æ¥áá) ¢ë§ë¢ ¥âìáï ä㭪樥© but_wnd_coords
align 4
prop_start:
pushad
mcall 40,0x27 ;¬ áª  ®¦¨¤ ¥¬ëå ᮡë⨩
inc byte[prop_wnd_run]
 
stdcall [tl_node_get_data],tree1
pop ebx
xor edx,edx
cmp ebx,0
je @f
mov ebx,dword[ebx] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
add ebx,dword[open_file_lif]
mov dx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
@@:
 
;­ áâனª  ᯨ᪠ ®¡ê¥ªâ®¢
mov dword[tree3.info_max_count],2
add dword[tree3.info_max_count],edx ;áâ ¢¨¬ ç¨á«® 㧫®¢, à ¢­®¥ ª®««¨ç¥áâ¢ã â®ç¥ª (+2 ­  ­ ç «® ¨ ª®­¥æ ᯨ᪠)
stdcall dword[tl_data_init], tree3
mov eax,dword[icon_tl_sys]
mov dword[tree3.data_img_sys],eax
mov eax,dword[icon_toolbar]
mov dword[tree3.data_img],eax
 
cmp ebx,0
je .no_object
cmp word[ebx],CHUNK_VERTLIST
jne .no_object ;¥á«¨ ­¥ â®â ®¡ê¥ªâ
add ebx,8
finit
.new_point:
mov dword[obj_point],ebx
mov dword[obj_point.text],0
cld
mov ecx,3
@@:
fld dword[ebx]
fstp qword[Data_Double]
call DoubleFloat_to_String
add ebx,4
stdcall str_len, Data_String
mov esi,txt_space
add esi,eax
cmp esi,txt_space.end
jl .normal_size
mov esi,txt_space.end-1 ;¬¨­¨¬ã¬ 1 ¯à®¡¥« ­ã¦­® ¤®¡ ¢¨âì, çâ®-¡ë æ¨äàë ­¥ ᫨¯ «¨áì
.normal_size:
stdcall str_cat, obj_point.text,esi
stdcall str_cat, obj_point.text,Data_String
loop @b
stdcall dword[tl_node_add], obj_point, (ID_ICON_DATA shl 16), tree3
stdcall dword[tl_cur_next], tree3
dec edx
cmp edx,0
jg .new_point
stdcall dword[tl_cur_beg], tree3
.no_object:
popad
 
align 4
prop_red_win:
pushad
mcall 12,1
 
xor eax,eax
mov edi,txt_4110 ;caption
mov bx,word[procinfo.box.left]
add bx,word[buf_0.l]
shl ebx,16
mov bx,prop_wnd_width
mov cx,word[procinfo.box.top]
shl ecx,16
mov cx,250
mov edx,0xffffd0
or edx,0x33000000
int 0x40
 
mov dword[w_scr_t3.all_redraw],1
stdcall [scrollbar_ver_draw],dword w_scr_t3
stdcall [tl_draw], tree3
mcall 12,2
popad
 
;­¥ ®âà뢠âì íâã äã­ªæ¨î ®â ¯à¥¤ë¤ã饩
align 4
prop_still:
pushad
mcall 10
 
cmp al,1 ;¨§¬. ¯®«®¦¥­¨¥ ®ª­ 
jz prop_red_win
cmp al,2
jne @f
call prop_key
@@:
cmp al,3
jz prop_button
cmp al,6
jne @f
call prop_mouse
@@:
popad
jmp prop_still
 
align 4
prop_key:
push eax
mcall 2
stdcall [tl_key], tree3
pop eax
ret
 
align 4
prop_mouse:
;push ecx edi
stdcall [tl_mouse], tree3
;pop edi ecx
ret
 
align 4
prop_button:
mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
 
cmp ah,10
jne @f
;;;call but_element_change
mov ah,1 ;¤«ï § ªàëâ¨ï ®ª­ 
@@:
 
cmp ah,1
jne prop_still
.exit:
mov dword[tree3.data_img],0 ;ç¨á⨬ 㪠§ â¥«¨ ­  ¨ª®­ª¨ çâ®-¡ë ¨å ­¥ 㤠«¨« ¤¥áâàãªâ®à
mov dword[tree3.data_img_sys],0 ;â. ª. ®­¨ ¥é¥ ¨á¯®«ì§ãîâìáï ¢ ¤à㣨å í«¥¬¥­â å
stdcall dword[tl_data_clear], tree3
mov byte[prop_wnd_run],0 ;®¡­ã«ï¥¬ áç¥â稪 ®ª®­
mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
 
;¤¥à¥¢® á ®¡ê¥ªâ ¬¨ ¢ ¯®«ì§®¢ â¥«ì᪮¬ ä ©«¥
tree3 tree_list MAX_OBJECT_SIZE,3,\
tl_key_no_edit+tl_list_box_mode,\
16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,30,300,150, 16, 4,0, el_focus,\
w_scr_t3,0
 
align 4
w_scr_t3:
.size_x dw 16 ;+0
rb 2+2+2
.btn_high dd 15 ;+8
.type dd 1 ;+12
.max_area dd 100 ;+16
rb 4+4
.bckg_col dd 0xeeeeee ;+28
.frnt_col dd 0xbbddff ;+32
.line_col dd 0 ;+36
rb 4+2+2
.run_x:
rb 2+2+2+2+4+4+4+4+4+4
.all_redraw dd 0 ;+80
.ar_offset dd 1 ;+84