mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-17 20:32:35 +03:00
8068f9225d
git-svn-id: svn://kolibrios.org@4146 a494cfbc-eb01-0410-851d-a64ba20cac60
716 lines
12 KiB
PHP
716 lines
12 KiB
PHP
idbChange equ 2
|
|
idbCreate equ 3
|
|
idbLeft equ 4
|
|
idbRight equ 5
|
|
idbCancel equ 1
|
|
|
|
DlgAdd:
|
|
DlgProp:
|
|
|
|
mov eax,[SelIcon]
|
|
mov [DlgSelIcon],eax
|
|
cmp eax,-1
|
|
jne SetProp
|
|
|
|
;-----------
|
|
mov eax,[MouseX]
|
|
mov ebx,[MouseY]
|
|
|
|
cmp ax,[wsX]
|
|
jae @f
|
|
mov ax,[wsX]
|
|
@@:
|
|
|
|
cmp bx,[wsY]
|
|
jae @f
|
|
mov bx,[wsY]
|
|
@@: ;eax,ebx - ॠ«ì ï ª®®à¤¨ â . ‚ᥠª®®à¤¨ âë ¢ ¯à®£¥ ®â®á¨â¥«ì® «¥¢®£® ¢¥à奣® 㣫 à ¡®ç¥© ®¡« áâ¨
|
|
|
|
xor edx,edx
|
|
mov dx,[wsXe]
|
|
sub edx,ICON_SIZE
|
|
cmp eax,edx
|
|
jbe @f
|
|
mov eax,edx
|
|
@@:
|
|
|
|
mov dx,[wsYe]
|
|
sub edx,ICON_SIZE
|
|
cmp ebx,edx
|
|
jbe @f
|
|
mov ebx,edx
|
|
@@:
|
|
|
|
xor edx,edx ;¯à¥®¡à §®¢ë¢ ¥¬ ¢ ®â®á¨â¥«ìë¥
|
|
mov dx,[wsW]
|
|
shr edx,1
|
|
add dx,[wsX]
|
|
cmp eax,edx
|
|
jbe @f
|
|
sub ax,[wsXe]
|
|
inc ax
|
|
jmp .dlg1
|
|
@@:
|
|
sub ax,[wsX]
|
|
.dlg1:
|
|
|
|
xor edx,edx
|
|
mov dx,[wsH]
|
|
shr edx,1
|
|
add dx,[wsY]
|
|
cmp ebx,edx
|
|
jbe @f
|
|
sub bx,[wsYe]
|
|
inc bx
|
|
jmp .dlg2
|
|
@@:
|
|
sub bx,[wsY]
|
|
.dlg2:
|
|
|
|
mov [AddX],eax
|
|
mov [AddY],ebx
|
|
;-----------
|
|
|
|
mov ecx,NAME_LENGTH
|
|
mov edi,DAreaName
|
|
xor al,al
|
|
rep stosb
|
|
mov dword[edtName.size],0
|
|
mov dword[edtName.pos],0
|
|
|
|
mov ecx,256
|
|
mov edi,DAreaPath
|
|
rep stosb
|
|
mov dword[edtExePath.size],0
|
|
mov dword[edtExePath.pos],0
|
|
|
|
mov ecx,256
|
|
mov edi,DAreaParams
|
|
rep stosb
|
|
mov dword[edtParams.size],0
|
|
mov dword[edtParams.pos],0
|
|
|
|
mov ecx,256
|
|
mov edi,DAreaIcon
|
|
rep stosb
|
|
mov dword[edtIcon.size],0
|
|
mov dword[edtIcon.pos],0
|
|
|
|
jmp startDlg
|
|
;--------
|
|
SetProp:
|
|
mov esi,[IconsOffs+eax*4]
|
|
mov edi,DAreaName
|
|
xor ecx,ecx
|
|
@@:
|
|
lodsb
|
|
stosb
|
|
inc ecx
|
|
test al,al
|
|
jnz @b
|
|
dec ecx
|
|
mov dword[edtName.size],ecx
|
|
mov dword[edtName.pos],ecx
|
|
|
|
xor ecx,ecx
|
|
mov edi,DAreaPath
|
|
@@:
|
|
lodsb
|
|
stosb
|
|
inc ecx
|
|
test al,al
|
|
jnz @b
|
|
dec ecx
|
|
mov dword[edtExePath.size],ecx
|
|
mov dword[edtExePath.pos],ecx
|
|
|
|
xor ecx,ecx
|
|
mov edi,DAreaParams
|
|
@@:
|
|
lodsb
|
|
stosb
|
|
inc ecx
|
|
test al,al
|
|
jnz @b
|
|
dec ecx
|
|
mov dword[edtParams.size],ecx
|
|
mov dword[edtParams.pos],ecx
|
|
|
|
xor ecx,ecx
|
|
mov edi,DAreaIcon
|
|
@@:
|
|
lodsb
|
|
stosb
|
|
inc ecx
|
|
test al,al
|
|
jnz @b
|
|
dec ecx
|
|
mov dword[edtIcon.size],ecx
|
|
mov dword[edtIcon.pos],ecx
|
|
|
|
|
|
startDlg:
|
|
mcall 9,RBProcInfo,-1
|
|
mcall 18,21,dword[RBProcInfo+30]
|
|
mov [slotDlgAdd],eax
|
|
|
|
or [edtName.flags],ed_focus
|
|
|
|
mcall 40,100111b ;SetMaskMessage 100111b
|
|
xor eax,eax
|
|
mov dword[MaxPage],0
|
|
@@:
|
|
add eax,ICONS_DRAW_COUNTW
|
|
inc dword[MaxPage]
|
|
cmp eax,[icon_count]
|
|
jb @b
|
|
dec dword[MaxPage]
|
|
cmp dword[MaxPage],0
|
|
jne @f
|
|
mov dword[MaxPage],1
|
|
@@:
|
|
|
|
DReDraw:
|
|
mcall 48,3,sc,40
|
|
|
|
mov eax,[sc.work]
|
|
rol eax,16
|
|
add al,9
|
|
jnc @f
|
|
mov al,0FFh
|
|
@@:
|
|
rol eax,16
|
|
add al,9
|
|
jnc @f
|
|
mov al,0FFh
|
|
@@:
|
|
add ah,9
|
|
jnc @f
|
|
mov ah,0FFh
|
|
@@:
|
|
|
|
mov [sbIcons.bckg_col],eax
|
|
m2m [sbIcons.frnt_col],[sc.work]
|
|
m2m [sbIcons.line_col],[sc.work_graph]
|
|
|
|
edit_boxes_set_sys_color edtName,edtExePath,sc
|
|
edit_boxes_set_sys_color edtExePath,edtParams,sc
|
|
edit_boxes_set_sys_color edtParams,edtIcon,sc
|
|
;edit_boxes_set_sys_color edtIcon,endEdits,sc
|
|
|
|
call DRedrawWin
|
|
|
|
DMessages:
|
|
mcall 10 ;WaitMessage
|
|
|
|
dec eax
|
|
jz DReDraw
|
|
dec eax
|
|
jz DKey
|
|
dec eax
|
|
jz DButton
|
|
sub eax,3
|
|
jz DMouse
|
|
|
|
jmp DMessages
|
|
|
|
|
|
;---------------------------------------------------------------------
|
|
DKey:
|
|
mcall 2 ;GetKeyPressed
|
|
cmp ah,1Bh
|
|
je DExit
|
|
cmp ah,9 ;Tab
|
|
je DNextEdit
|
|
stdcall [edit_box_key],edtName
|
|
stdcall [edit_box_key],edtExePath
|
|
stdcall [edit_box_key],edtParams
|
|
;stdcall [edit_box_key],edtIcon
|
|
|
|
jmp DMessages
|
|
|
|
|
|
DNextEdit:
|
|
test [edtName.flags],ed_focus
|
|
jne .DNE1
|
|
test [edtExePath.flags],ed_focus
|
|
jne .DNE2
|
|
test [edtParams.flags],ed_focus
|
|
jne .DNE3
|
|
;test [edtIcon.flags],ed_focus
|
|
;jne .DNE4
|
|
jmp DMessages
|
|
|
|
.DNE1:
|
|
and [edtName.flags],not ed_focus
|
|
or [edtExePath.flags],ed_focus
|
|
stdcall [edit_box_draw],edtName
|
|
stdcall [edit_box_draw],edtExePath
|
|
jmp DMessages
|
|
|
|
.DNE2:
|
|
and [edtExePath.flags],not ed_focus
|
|
or [edtParams.flags],ed_focus
|
|
stdcall [edit_box_draw],edtExePath
|
|
stdcall [edit_box_draw],edtParams
|
|
jmp DMessages
|
|
|
|
.DNE3:
|
|
and [edtParams.flags],not ed_focus
|
|
or [edtName.flags],ed_focus
|
|
stdcall [edit_box_draw],edtParams
|
|
stdcall [edit_box_draw],edtName
|
|
jmp DMessages
|
|
|
|
;.DNE4:
|
|
; and [edtIcon.flags],not ed_focus
|
|
; or [edtName.flags],ed_focus
|
|
; stdcall [edit_box_draw],edtName
|
|
; stdcall [edit_box_draw],edtIcon
|
|
; jmp DMessages
|
|
;---------------------------------------------------------------------
|
|
DButton:
|
|
mcall 17 ;GetButtonPressed
|
|
cmp ah, idbCancel
|
|
je DExit
|
|
cmp ah,idbChange
|
|
je DSetExePath
|
|
cmp ah,idbCreate
|
|
je DSaveIcon
|
|
|
|
jmp DMessages
|
|
;-------------------------------------------------------------------------------
|
|
DMouse:
|
|
stdcall [edit_box_mouse],edtName
|
|
stdcall [edit_box_mouse],edtExePath
|
|
stdcall [edit_box_mouse],edtParams
|
|
; stdcall [edit_box_mouse],edtIcon
|
|
|
|
push [sbIcons.position]
|
|
stdcall [scrollbar_h_mouse],sbIcons
|
|
pop eax
|
|
cmp eax,[sbIcons.position]
|
|
je @f
|
|
call DrawStdIcons
|
|
@@:
|
|
|
|
mcall 37,2 ;GetMouseKey
|
|
test eax,1
|
|
jz DMessages
|
|
mcall 37,1 ;GetMouseWinPos
|
|
|
|
test eax,10001000h
|
|
jne DMessages
|
|
xor edx,edx
|
|
mov dx,ax ;y
|
|
shr eax,16 ;x
|
|
|
|
sub eax,ICONSX
|
|
js DMessages
|
|
sub edx,ICONSY
|
|
js DMessages
|
|
|
|
cmp eax,(IMG_SIZE+SPCW)*ICONS_DRAW_COUNTW-SPCW
|
|
ja DMessages
|
|
cmp edx,(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH-SPCH
|
|
ja DMessages
|
|
|
|
xor ebx,ebx
|
|
mov ecx,[sbIcons.position]
|
|
test ecx,ecx
|
|
jz .DM
|
|
@@:
|
|
add ebx,ICONS_DRAW_COUNTH
|
|
loop @b
|
|
.DM:
|
|
|
|
sub eax,IMG_SIZE+SPCW
|
|
js .DM1
|
|
@@:
|
|
add ebx,ICONS_DRAW_COUNTH
|
|
sub eax,IMG_SIZE+SPCW
|
|
jns @b
|
|
.DM1:
|
|
|
|
|
|
sub edx,IMG_SIZE+SPCH
|
|
js .DM2
|
|
@@:
|
|
inc ebx
|
|
sub edx,IMG_SIZE+SPCH
|
|
jns @b
|
|
.DM2:
|
|
|
|
mov eax,ebx
|
|
|
|
cmp eax,[icon_count]
|
|
jae DMessages
|
|
|
|
mov bl,10
|
|
div bl
|
|
|
|
add ah,30h
|
|
test al,al
|
|
jz @f
|
|
|
|
add al,30h
|
|
mov byte[DAreaIcon],al
|
|
mov byte[DAreaIcon+1],ah
|
|
mov byte[DAreaIcon+2],0
|
|
mov dword[edtIcon.size],2
|
|
jmp .RedrawNum
|
|
|
|
@@:
|
|
mov byte[DAreaIcon],ah
|
|
mov byte[DAreaIcon+1],0
|
|
mov dword[edtIcon.size],1
|
|
jmp .RedrawNum
|
|
.RedrawNum:
|
|
|
|
|
|
; stdcall [edit_box_draw],edtIcon
|
|
|
|
|
|
call DrawSelIcon
|
|
jmp DReDraw;DMessages;
|
|
;-------------------------------------------------------------------------------
|
|
DSetExePath:
|
|
stdcall [OpenDialog_Start],OpenDialog_data
|
|
mov edi,DAreaPath
|
|
xor al,al
|
|
or ecx,-1
|
|
repne scasb
|
|
sub edi,DAreaPath
|
|
dec edi
|
|
mov dword[edtExePath+12*4],edi
|
|
|
|
jmp DMessages;DReDraw;
|
|
|
|
DSaveIcon:
|
|
mov edi,DAreaName
|
|
mov esi,secRButt
|
|
@@: lodsb
|
|
scasb
|
|
jne @f
|
|
test al,al
|
|
jnz @b
|
|
|
|
mov dword[fiRunProg+8],ErrName
|
|
mov dword[fiRunProg+21],pthNotify
|
|
mcall 70,fiRunProg
|
|
|
|
jmp DMessages
|
|
@@:
|
|
mov dword[fiRunProg+8],WarningSave
|
|
mov dword[fiRunProg+21],pthNotify
|
|
mcall 70,fiRunProg
|
|
|
|
|
|
cmp [DlgSelIcon],-1
|
|
je @f
|
|
;㤠«ï¥¬ ¨§ ini áâ àãî ¨ª®ªã
|
|
mov ebx,[DlgSelIcon]
|
|
mov eax,[IconsOffs+ebx*4]
|
|
stdcall [ini_del_section],IconIni,eax
|
|
|
|
stdcall EditIcon,[DlgSelIcon],DAreaIcon,DAreaName,DAreaPath,DAreaParams
|
|
jmp DExitAndSave
|
|
@@:
|
|
stdcall AddIcon,[AddX],[AddY],DAreaIcon,DAreaName,DAreaPath,DAreaParams
|
|
;jmp DExitAndSave
|
|
;-------------------------------------------------------------------------------
|
|
DExitAndSave:
|
|
|
|
stdcall [ini_set_str],IconIni,DAreaName,keyPath,DAreaPath,dword[edtExePath.size]
|
|
stdcall [ini_set_str],IconIni,DAreaName,keyParams,DAreaParams,dword[edtParams.size]
|
|
stdcall [ini_set_str],IconIni,DAreaName,keyIco,DAreaIcon,dword[edtIcon.size]
|
|
stdcall [ini_set_int],IconIni,DAreaName,keyX,[MouseX]
|
|
stdcall [ini_set_int],IconIni,DAreaName,keyY,[MouseY]
|
|
|
|
DExit:
|
|
mov [DlgAddActiv],0
|
|
mov [slotDlgAdd],0
|
|
mcall -1 ;ExitThread
|
|
|
|
;##################################################################
|
|
proc DRedrawWin
|
|
mcall 12,1 ;RedrawWinBeg
|
|
mov edx,[sc.work]
|
|
or edx,34000000h
|
|
cmp [DlgSelIcon],-1
|
|
jne @f
|
|
mov edi,DTitleAdd
|
|
jmp .l1
|
|
@@:
|
|
mov edi,DTitleProp
|
|
.l1:
|
|
mcall 0,<100,400>,<100,(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH+165>,,,
|
|
|
|
stdcall [edit_box_draw],edtName
|
|
stdcall [edit_box_draw],edtExePath
|
|
stdcall [edit_box_draw],edtParams
|
|
; stdcall [edit_box_draw],edtIcon
|
|
|
|
call DrawStdIcons
|
|
|
|
|
|
stdcall [scrollbar_h_draw],sbIcons
|
|
mcall 38,<ICONSX+1,END_ICONS_AREAW-2>,\
|
|
<END_ICONS_AREAH+3,END_ICONS_AREAH+3>,\
|
|
[sc.work_graph]
|
|
mcall ,<ICONSX+1,END_ICONS_AREAW-2>,\
|
|
<END_ICONS_AREAH+3+15,END_ICONS_AREAH+3+15>,\
|
|
[sc.work_graph]
|
|
|
|
mcall ,<ICONSX,ICONSX>,\
|
|
<END_ICONS_AREAH+3+1,END_ICONS_AREAH+3+15-1>,\
|
|
[sc.work_graph]
|
|
mcall ,<END_ICONS_AREAW-1,END_ICONS_AREAW-1>,\
|
|
<END_ICONS_AREAH+3+1,END_ICONS_AREAH+3+15-1>,\
|
|
[sc.work_graph]
|
|
|
|
;BUTTONS
|
|
mcall 8,<250,49>,<30+END_ICONS_AREAH,16>,idbCreate,[sc.work_button]
|
|
mcall ,<305,54>, ,idbCancel
|
|
mcall ,<351,14>,<26,14> ,idbChange
|
|
|
|
;CAPTIONS
|
|
mov ecx,[sc.work_text]
|
|
or ecx,80000000h
|
|
mcall 4,<30+IMG_SIZE,10>,,DCaptName
|
|
mcall ,<30+IMG_SIZE,30>,,DCaptPath
|
|
mcall ,<30+IMG_SIZE,50>,,DCaptParams
|
|
;mcall ,<30+IMG_SIZE,70>,,DCaptIcon
|
|
|
|
if lang eq ru
|
|
mov ecx,[sc.work_button_text]
|
|
or ecx,80000000h
|
|
mcall ,<309,35+END_ICONS_AREAH>,,DCaptCancel
|
|
|
|
cmp [DlgSelIcon],-1
|
|
jne @f
|
|
mpack ebx,255,35+END_ICONS_AREAH
|
|
mov edx,DCaptCreate
|
|
jmp .DRD1
|
|
@@:
|
|
mpack ebx,252,35+END_ICONS_AREAH
|
|
mov edx,DCaptProperties
|
|
.DRD1:
|
|
else
|
|
mov ecx,[sc.work_button_text]
|
|
or ecx,80000000h
|
|
mcall ,<315,35+END_ICONS_AREAH>,,DCaptCancel
|
|
|
|
|
|
cmp [DlgSelIcon],-1
|
|
jne @f
|
|
mpack ebx,257,35+END_ICONS_AREAH
|
|
mov edx,DCaptCreate
|
|
jmp .DRD1
|
|
@@:
|
|
mpack ebx,257,35+END_ICONS_AREAH
|
|
mov edx,DCaptProperties
|
|
.DRD1:
|
|
end if
|
|
mcall
|
|
|
|
mcall 1,351+4 ,26+10,[sc.work_button_text]
|
|
mcall ,351+4+3,26+10,
|
|
mcall ,351+4+6,26+10,
|
|
|
|
call DrawSelIcon
|
|
|
|
mcall 12,2 ;RedrawWinEnd
|
|
ret
|
|
endp
|
|
|
|
|
|
proc DrawStdIcons
|
|
local IcoX:DWORD,\
|
|
IcoY:DWORD,\
|
|
iIcon:DWORD
|
|
|
|
mov ecx,[sbIcons.position]
|
|
xor eax,eax
|
|
m2m dword[iIcon],0
|
|
|
|
test ecx,ecx
|
|
jz .DST1
|
|
@@:
|
|
add [iIcon],ICONS_DRAW_COUNTH
|
|
add eax,IMG_SIZE*IMG_SIZE*4*ICONS_DRAW_COUNTH
|
|
loop @b
|
|
.DST1:
|
|
|
|
lea esi,[eax+44]
|
|
add esi,[raw_pointer]
|
|
|
|
mov [IcoX],ICONSX
|
|
|
|
mov ecx,ICONS_DRAW_COUNTW
|
|
.DrawIcons:
|
|
push ecx
|
|
|
|
mov [IcoY],ICONSY
|
|
|
|
mov ecx,ICONS_DRAW_COUNTH
|
|
.DrawIcoStolb:
|
|
push ecx
|
|
|
|
mov edi,DlgBufImg
|
|
mov edx,IMG_SIZE
|
|
|
|
.DrawLine:
|
|
|
|
|
|
mov ecx,IMG_SIZE
|
|
.DrawPix:
|
|
|
|
lodsd
|
|
test eax,0FF000000h
|
|
jnz @f
|
|
mov eax,[sc.work]
|
|
@@:
|
|
|
|
mov [edi],ax
|
|
shr eax,16
|
|
mov [edi+2],al
|
|
add edi,3
|
|
|
|
loop .DrawPix
|
|
|
|
dec edx
|
|
jnz .DrawLine
|
|
|
|
mov edx,[IcoX]
|
|
shl edx,16
|
|
mov dx,word[IcoY]
|
|
mcall 7,DlgBufImg,<IMG_SIZE,IMG_SIZE>
|
|
|
|
inc [iIcon]
|
|
mov eax,[iIcon]
|
|
cmp eax,[icon_count]
|
|
jae .endDrawIcon
|
|
|
|
add dword[IcoY],IMG_SIZE+SPCH
|
|
pop ecx
|
|
loop .DrawIcoStolb
|
|
|
|
add dword[IcoX],IMG_SIZE+SPCW
|
|
pop ecx
|
|
loop .DrawIcons
|
|
jmp .endProc
|
|
|
|
.endDrawIcon:
|
|
|
|
mov ecx,IMG_SIZE*IMG_SIZE
|
|
mov edi,DlgBufImg
|
|
mov eax,[sc.work]
|
|
mov ebx,eax
|
|
shr ebx,16
|
|
@@:
|
|
mov word[edi],ax
|
|
mov [edi+2],bl
|
|
add edi,3
|
|
loop @b
|
|
|
|
;§ â¨à ¨¥ ¥ ¨á¯®«ì§®¢ ëå ¬¥áâ
|
|
jmp .Dalee
|
|
|
|
.DrawIcons2:
|
|
push ecx
|
|
|
|
mov [IcoY],ICONSY
|
|
mov ecx,ICONS_DRAW_COUNTH
|
|
.DrawIcoStolb2:
|
|
push ecx
|
|
|
|
mov edx,[IcoX]
|
|
shl edx,16
|
|
mov dx,word[IcoY]
|
|
mcall 7,DlgBufImg,<IMG_SIZE,IMG_SIZE>
|
|
|
|
.Dalee:
|
|
add dword[IcoY],IMG_SIZE+SPCH
|
|
pop ecx
|
|
loop .DrawIcoStolb2
|
|
|
|
add dword[IcoX],IMG_SIZE+SPCW
|
|
pop ecx
|
|
loop .DrawIcons2
|
|
|
|
.endProc:
|
|
|
|
ret
|
|
endp
|
|
|
|
proc DrawSelIcon
|
|
mov edi,DAreaIcon
|
|
cmp byte[edi],0
|
|
jne @f
|
|
ret
|
|
@@:
|
|
|
|
mov al,[edi]
|
|
cmp al,'9'
|
|
ja .PathToIcon
|
|
cmp al,'/'
|
|
jne .GetIconInd
|
|
.PathToIcon:
|
|
mov al,30h ;§ £«ãèª !!!!!!!!!!!!!
|
|
mov byte[edi+1],0
|
|
.GetIconInd:
|
|
;int3
|
|
sub al,30h
|
|
cmp byte[edi+1],0
|
|
je @f
|
|
shl eax,1
|
|
lea eax,[eax*4+eax]
|
|
xor edx,edx
|
|
mov dl,[edi+1]
|
|
sub dl,30h
|
|
add eax,edx
|
|
@@: ;eax=num icon
|
|
cmp eax,[icon_count]
|
|
jb @f
|
|
xor eax,eax
|
|
@@:
|
|
test eax,eax
|
|
je .DI1
|
|
mov ecx,eax
|
|
xor eax,eax
|
|
@@:
|
|
add eax,IMG_SIZE*IMG_SIZE*4
|
|
loop @b
|
|
.DI1:
|
|
mov esi,eax
|
|
add esi,[raw_pointer]
|
|
add esi,44
|
|
|
|
mov edi,DlgBufImg
|
|
mov edx,IMG_SIZE
|
|
.DrawLine:
|
|
|
|
mov ecx,IMG_SIZE
|
|
.DrawPix:
|
|
|
|
lodsd
|
|
test eax,0FF000000h
|
|
jnz @f
|
|
mov eax,[sc.work]
|
|
@@:
|
|
|
|
mov word[edi],ax
|
|
shr eax,16
|
|
mov [edi+2],al
|
|
add edi,3
|
|
|
|
loop .DrawPix
|
|
|
|
dec edx
|
|
jnz .DrawLine
|
|
|
|
mcall 7,DlgBufImg,<IMG_SIZE,IMG_SIZE>,<15,15>
|
|
|
|
ret
|
|
endp |