forked from KolibriOS/kolibrios
546 lines
12 KiB
Plaintext
546 lines
12 KiB
Plaintext
|
if lang eq ru
|
|||
|
MinRMenuW equ 18*6+10
|
|||
|
else
|
|||
|
MinRMenuW equ 15*6+10
|
|||
|
end if
|
|||
|
|
|||
|
idbRRedrawFon equ 100
|
|||
|
idbRAlign equ 101
|
|||
|
idbRFixIcons equ 102
|
|||
|
idbRAdd equ 103
|
|||
|
idbRDel equ 104
|
|||
|
idbRProp equ 105
|
|||
|
|
|||
|
;---- thread for rbutton -----------------------------------------------------------------------
|
|||
|
RButtonWin:
|
|||
|
mcall 40,100101b ;SetMaskMessage 100101b
|
|||
|
|
|||
|
stdcall GetNumIcon,[MouseX],[MouseY],-1
|
|||
|
mov [SelIcon],eax
|
|||
|
|
|||
|
cmp eax,-1
|
|||
|
jne @f
|
|||
|
mov [RMenuH],16*4+3+3
|
|||
|
mov [RMenuHsb],16*4+3+3
|
|||
|
jmp .rbw1
|
|||
|
@@:
|
|||
|
mov [RMenuH],16*5+3+3
|
|||
|
mov [RMenuHsb],16*5+3+3
|
|||
|
.rbw1:
|
|||
|
|
|||
|
mov [NumUserButt],0
|
|||
|
mov [RMenuW],0
|
|||
|
mcall 70,fiIni
|
|||
|
mcall 68,12,dword[bufIni+32]
|
|||
|
mov [RBUser],eax
|
|||
|
stdcall [ini_enum_keys],IconIni,secRButt,GetUserBut
|
|||
|
|
|||
|
|
|||
|
RBWRedraw:
|
|||
|
mcall 12,1 ;RedrawWinBeg
|
|||
|
mov ebx,[MouseX]
|
|||
|
shl ebx,16
|
|||
|
mov bx,[RMenuW]
|
|||
|
mov ecx,[MouseY]
|
|||
|
shl ecx,16
|
|||
|
mov cx,[RMenuH]
|
|||
|
mov edx,0177CCFFh
|
|||
|
mov esi,01000000h
|
|||
|
xor eax,eax
|
|||
|
int 40h
|
|||
|
|
|||
|
;-----------
|
|||
|
mov ecx,[NumUserButt]
|
|||
|
.DrawUB:
|
|||
|
push ecx
|
|||
|
|
|||
|
mov eax,[NumUserButt]
|
|||
|
sub eax,ecx
|
|||
|
mov edx,eax ;button ID
|
|||
|
shl eax,4+16 ;*16*10000h
|
|||
|
mov ecx,eax
|
|||
|
mov cx,16
|
|||
|
|
|||
|
xor ebx,ebx
|
|||
|
mov bx,[RMenuW]
|
|||
|
mov esi,0888888h
|
|||
|
mcall 8
|
|||
|
|
|||
|
mov ebx,50000h
|
|||
|
shr ecx,16
|
|||
|
mov bx,cx
|
|||
|
add bx,5
|
|||
|
|
|||
|
mov ecx,80000000h
|
|||
|
|
|||
|
mov eax,[NumUserButt]
|
|||
|
sub eax,[esp]
|
|||
|
mov edx,[RBUser+eax*8]
|
|||
|
|
|||
|
mcall 4
|
|||
|
|
|||
|
pop ecx
|
|||
|
loop .DrawUB
|
|||
|
|
|||
|
;-----------
|
|||
|
xor ebx,ebx
|
|||
|
mov bx,[RMenuW]
|
|||
|
mov cx,[RMenuH]
|
|||
|
sub cx,[RMenuHsb]
|
|||
|
push ecx
|
|||
|
mov dx,cx
|
|||
|
shl ecx,16
|
|||
|
mov cx,dx
|
|||
|
|
|||
|
;<3B><>ࢠ<EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD>⥫쭠<E2A5AB> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mcall 38,,,0888888h
|
|||
|
add ecx,00010001h
|
|||
|
mcall ,,,
|
|||
|
|
|||
|
;------------
|
|||
|
mov ecx,[esp]
|
|||
|
add ecx,2
|
|||
|
shl ecx,16
|
|||
|
mov cx,16
|
|||
|
|
|||
|
mcall 8,,,idbRRedrawFon,0888888h ;3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ண<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add ecx,00100000h
|
|||
|
mcall ,,,idbRAlign
|
|||
|
add ecx,00100000h
|
|||
|
mcall ,,,idbRFixIcons
|
|||
|
|
|||
|
mov ebx,50000h
|
|||
|
mov bx,word[esp]
|
|||
|
add bx,2+5
|
|||
|
mcall 4,,80000000h,RMenuRedrawFon
|
|||
|
add ebx,16
|
|||
|
mcall ,,,RMenuAlign
|
|||
|
|
|||
|
add ebx,16
|
|||
|
cmp [bFixIcons],0
|
|||
|
jne @f
|
|||
|
mov edx,RMenuOffMoving
|
|||
|
jmp .RBWR1
|
|||
|
@@:
|
|||
|
mov edx,RMenuOnMoving
|
|||
|
.RBWR1:
|
|||
|
mcall
|
|||
|
|
|||
|
;------------
|
|||
|
xor ebx,ebx ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD>⥫쭠<E2A5AB> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov bx,[RMenuW]
|
|||
|
mov ecx,[esp]
|
|||
|
add ecx,16*3+2
|
|||
|
mov dx,cx
|
|||
|
shl ecx,16
|
|||
|
mov cx,dx
|
|||
|
mcall 38,,,0888888h
|
|||
|
add ecx,00010001h
|
|||
|
mcall ,,,
|
|||
|
;------------
|
|||
|
;1 <20><><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>쥣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov ecx,[esp]
|
|||
|
add ecx,16*3+4
|
|||
|
shl ecx,16
|
|||
|
mov cx,16
|
|||
|
cmp dword[SelIcon],-1
|
|||
|
je @f
|
|||
|
|
|||
|
mcall 8,,,idbRDel,0888888h
|
|||
|
add ecx,00100000h
|
|||
|
mcall ,,,idbRProp,0888888h
|
|||
|
|
|||
|
mov ebx,50000h
|
|||
|
mov bx,word[esp]
|
|||
|
add bx,16*3+4+5
|
|||
|
mcall 4,,80000000h,RMenuDel
|
|||
|
add bx,16
|
|||
|
mcall ,, ,RMenuProp
|
|||
|
|
|||
|
jmp .endRM
|
|||
|
@@:
|
|||
|
|
|||
|
mcall 8,,,idbRAdd,0888888h
|
|||
|
mov ebx,50000h
|
|||
|
mov bx,word[esp]
|
|||
|
add bx,16*3+4+5
|
|||
|
mcall 4,,80000000h,RMenuAdd
|
|||
|
|
|||
|
.endRM:
|
|||
|
|
|||
|
pop ecx
|
|||
|
mcall 12,2 ;RedrawWinEnd
|
|||
|
|
|||
|
mcall 9,RBProcInfo,-1 ;GetThreadInfo RBProcInfo,-1
|
|||
|
mcall 18,21,dword[RBProcInfo+30]
|
|||
|
m2m dword[RBSlot],eax
|
|||
|
|
|||
|
RBWMessages:
|
|||
|
mcall 10 ;WaitMessage
|
|||
|
dec eax
|
|||
|
jz RBWRedraw
|
|||
|
sub eax,2
|
|||
|
jz RBWButton
|
|||
|
sub eax,3
|
|||
|
jz RBWMouse
|
|||
|
jmp RBWMessages
|
|||
|
|
|||
|
RBWButton:
|
|||
|
mcall 17 ;GetButtonPressed
|
|||
|
shr eax,8
|
|||
|
cmp eax,idbRRedrawFon
|
|||
|
jz RBRedrawFon
|
|||
|
cmp eax,idbRAlign
|
|||
|
jz RBAlign
|
|||
|
cmp eax,idbRFixIcons
|
|||
|
jz RBFixIcons
|
|||
|
cmp eax,idbRAdd
|
|||
|
jz RBAdd
|
|||
|
cmp eax,idbRDel
|
|||
|
jz RBDelete
|
|||
|
cmp eax,idbRProp
|
|||
|
jz RBPropeties
|
|||
|
|
|||
|
cmp eax,[NumUserButt]
|
|||
|
ja @f
|
|||
|
|
|||
|
mov eax,[RBUser+eax*8+4]
|
|||
|
mov dword[fiRunProg+8],0
|
|||
|
mov dword[fiRunProg+21],eax
|
|||
|
mcall 70,fiRunProg
|
|||
|
@@:
|
|||
|
jmp RBWExit
|
|||
|
|
|||
|
RBWMouse:
|
|||
|
mcall 37,2 ;GetMouseKey
|
|||
|
test eax,111b
|
|||
|
jz RBWMessages
|
|||
|
mcall 37,0 ;GetMousePos
|
|||
|
xor ebx,ebx
|
|||
|
mov bx,ax ;y
|
|||
|
shr eax,16 ;x
|
|||
|
|
|||
|
xor ecx,ecx
|
|||
|
mov cx,bx
|
|||
|
mov bx,ax
|
|||
|
|
|||
|
mcall 34
|
|||
|
cmp eax,[RBSlot]
|
|||
|
je RBWMessages
|
|||
|
|
|||
|
RBWExit:
|
|||
|
mcall 68,13,[RBUser]
|
|||
|
mov [RButtonActiv],0
|
|||
|
mcall -1 ;ExitProcess
|
|||
|
|
|||
|
|
|||
|
RBRedrawFon:
|
|||
|
mcall 15,3
|
|||
|
jmp RBWExit
|
|||
|
|
|||
|
RBAlign:
|
|||
|
call AlignIcons
|
|||
|
|
|||
|
m2m [PIcoDB],[BegData]
|
|||
|
stdcall [ini_enum_sections],IconIni,Ini_SavePos
|
|||
|
|
|||
|
mov dword[fiRunProg+8],WarningSave
|
|||
|
mov dword[fiRunProg+21],pthNotify
|
|||
|
mcall 70,fiRunProg
|
|||
|
mov [bNotSave],0
|
|||
|
|
|||
|
jmp RBRedrawFon
|
|||
|
|
|||
|
RBFixIcons:
|
|||
|
xor dword[bFixIcons],1
|
|||
|
|
|||
|
cmp [bNotSave],0
|
|||
|
je @f
|
|||
|
|
|||
|
mov dword[fiRunProg+8],WarningSave
|
|||
|
mov dword[fiRunProg+21],pthNotify
|
|||
|
mcall 70,fiRunProg
|
|||
|
mov [bNotSave],0
|
|||
|
|
|||
|
@@:
|
|||
|
jmp RBWExit
|
|||
|
|
|||
|
RBAdd:
|
|||
|
; mov [DlgAddActiv],1
|
|||
|
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg
|
|||
|
jmp RBWExit
|
|||
|
|
|||
|
RBDelete:
|
|||
|
|
|||
|
mov eax,[SelIcon]
|
|||
|
mov eax,[IconsOffs+eax*4]
|
|||
|
stdcall [ini_del_section],IconIni,eax
|
|||
|
|
|||
|
stdcall DelIcon,[SelIcon]
|
|||
|
; mov dword[fiStdIco],2
|
|||
|
; m2m dword[fInfo+12],dword[SizeData]
|
|||
|
; mcall 70,fInfo
|
|||
|
|
|||
|
mov dword[fiRunProg+8],WarningSave
|
|||
|
mov dword[fiRunProg+21],pthNotify
|
|||
|
mcall 70,fiRunProg
|
|||
|
mov [bNotSave],0
|
|||
|
|
|||
|
jmp RBRedrawFon
|
|||
|
|
|||
|
RBPropeties:
|
|||
|
; mov [DlgAddActiv],1
|
|||
|
mcall 51,1,DlgProp,stack_dlg ;CreateThread DlgProp,stack_dlg
|
|||
|
jmp RBWExit
|
|||
|
|
|||
|
|
|||
|
|
|||
|
proc AlignIcons
|
|||
|
local posX:WORD,\
|
|||
|
posY:WORD,\
|
|||
|
negatX:WORD,\
|
|||
|
negatY:WORD
|
|||
|
|
|||
|
xor ebx,ebx
|
|||
|
|
|||
|
mov ecx,[MaxNumIcon]
|
|||
|
test ecx,ecx
|
|||
|
jnz .AlignIco
|
|||
|
ret
|
|||
|
.AlignIco:
|
|||
|
push ecx
|
|||
|
or ecx,-1
|
|||
|
mov edi,dword[IconsOffs+ebx]
|
|||
|
xor eax,eax
|
|||
|
repne scasb
|
|||
|
repne scasb
|
|||
|
repne scasb
|
|||
|
repne scasb
|
|||
|
|
|||
|
mov dword[negatX],0
|
|||
|
|
|||
|
;-------- <20>८<EFBFBD>ࠧ㥬 <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD><E2A5AB><EFBFBD><EFBFBD>
|
|||
|
mov ax,[edi+2]
|
|||
|
test ax,8000h
|
|||
|
jz @f
|
|||
|
neg ax
|
|||
|
mov word[negatX],1
|
|||
|
@@:
|
|||
|
mov [posX],ax
|
|||
|
|
|||
|
mov ax,[edi]
|
|||
|
test ax,8000h
|
|||
|
jz @f
|
|||
|
neg ax
|
|||
|
mov word[negatY],1
|
|||
|
@@:
|
|||
|
mov [posY],ax
|
|||
|
|
|||
|
;-----
|
|||
|
mov ax,[posY]
|
|||
|
mov dx,ALIGN_SIZE
|
|||
|
|
|||
|
cmp ax,dx
|
|||
|
jb .AI0
|
|||
|
@@: sub ax,dx
|
|||
|
cmp ax,dx
|
|||
|
jae @b
|
|||
|
.AI0:
|
|||
|
|
|||
|
mov dx,ax
|
|||
|
cmp dx,ALIGN_SIZE/2
|
|||
|
jb .AI1
|
|||
|
|
|||
|
mov ax,ALIGN_SIZE
|
|||
|
sub ax,dx
|
|||
|
add [posY],ax
|
|||
|
|
|||
|
jmp .AI2
|
|||
|
.AI1:
|
|||
|
sub [posY],dx
|
|||
|
.AI2:
|
|||
|
;-----
|
|||
|
mov ax,[posX]
|
|||
|
mov dx,ALIGN_SIZE
|
|||
|
|
|||
|
cmp ax,dx
|
|||
|
jb .AI3
|
|||
|
@@: sub ax,dx
|
|||
|
cmp ax,dx
|
|||
|
jae @b
|
|||
|
.AI3:
|
|||
|
|
|||
|
mov dx,ax
|
|||
|
cmp dx,ALIGN_SIZE/2
|
|||
|
jb .AI4
|
|||
|
|
|||
|
mov ax,ALIGN_SIZE
|
|||
|
sub ax,dx
|
|||
|
add [posX],ax
|
|||
|
|
|||
|
jmp .AI5
|
|||
|
.AI4:
|
|||
|
sub [posX],dx
|
|||
|
.AI5:
|
|||
|
|
|||
|
;----- <20>८<EFBFBD>ࠧ<EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD><E2A5AB><EFBFBD><EFBFBD> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD>
|
|||
|
mov ax,[posX]
|
|||
|
|
|||
|
cmp [negatX],1
|
|||
|
jne @f
|
|||
|
neg ax
|
|||
|
inc ax
|
|||
|
jmp .AI6
|
|||
|
@@:
|
|||
|
|
|||
|
mov dx,[ScreenX]
|
|||
|
shr dx,1
|
|||
|
cmp ax,dx
|
|||
|
jbe .AI6
|
|||
|
sub ax,[ScreenX]
|
|||
|
.AI6:
|
|||
|
mov word[edi+2],ax
|
|||
|
|
|||
|
|
|||
|
mov ax,[posY]
|
|||
|
cmp [negatY],1
|
|||
|
jne @f
|
|||
|
neg ax
|
|||
|
inc ax
|
|||
|
jmp .AI7
|
|||
|
@@:
|
|||
|
|
|||
|
mov dx,[ScreenY]
|
|||
|
shr dx,1
|
|||
|
cmp ax,dx
|
|||
|
jbe .AI7
|
|||
|
sub ax,[ScreenY]
|
|||
|
.AI7:
|
|||
|
mov word[edi],ax
|
|||
|
|
|||
|
;--------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
pop ecx
|
|||
|
add ebx,4
|
|||
|
dec ecx
|
|||
|
jnz .AlignIco
|
|||
|
; loop .AlignIco
|
|||
|
|
|||
|
|
|||
|
; mov dword[fInfo],2
|
|||
|
; mcall 70,fInfo
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;-------------------------------------------------------------------------------
|
|||
|
proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
|
|||
|
cmp [NumUserButt],16
|
|||
|
jne @f
|
|||
|
ret
|
|||
|
@@:
|
|||
|
|
|||
|
push ebx esi edi
|
|||
|
|
|||
|
mov edi,[key_name] ;<3B><>।<EFBFBD><E0A5A4>塞 <20><>ਭ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
xor eax,eax
|
|||
|
or ecx,-1
|
|||
|
repne scasb
|
|||
|
sub edi,[key_name]
|
|||
|
mov eax,edi
|
|||
|
shl eax,1
|
|||
|
lea eax,[eax*2+eax+5*2]
|
|||
|
cmp ax,[RMenuW]
|
|||
|
jbe @f
|
|||
|
mov [RMenuW],ax
|
|||
|
@@:
|
|||
|
cmp [RMenuW],MinRMenuW
|
|||
|
jae @f
|
|||
|
mov [RMenuW],MinRMenuW
|
|||
|
@@:
|
|||
|
|
|||
|
mov ebx,[NumUserButt]
|
|||
|
|
|||
|
mov esi,[key_name]
|
|||
|
mov edi,[RBUser+ebx*8]
|
|||
|
@@: lodsb
|
|||
|
stosb
|
|||
|
test al,al
|
|||
|
jnz @b
|
|||
|
|
|||
|
;debug_newline
|
|||
|
|
|||
|
|
|||
|
mov [RBUser+ebx*8+4],edi
|
|||
|
mov esi,[key_value]
|
|||
|
@@: lodsb
|
|||
|
stosb
|
|||
|
test al,al
|
|||
|
jnz @b
|
|||
|
|
|||
|
mov [RBUser+ebx*8+8],edi
|
|||
|
|
|||
|
inc [NumUserButt]
|
|||
|
add [RMenuH],16
|
|||
|
|
|||
|
pop edi esi ebx
|
|||
|
mov eax,1
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
proc Ini_SavePos stdcall,f_name,sec_name
|
|||
|
push ebx edi esi
|
|||
|
;int3
|
|||
|
xor ebx,ebx
|
|||
|
.SearchSect:
|
|||
|
mov edi,[IconsOffs+ebx*4]
|
|||
|
mov esi,[sec_name]
|
|||
|
@@:
|
|||
|
lodsb
|
|||
|
scasb
|
|||
|
jne @f
|
|||
|
test al,al
|
|||
|
jnz @b
|
|||
|
|
|||
|
jmp .IcoDataFound
|
|||
|
@@:
|
|||
|
|
|||
|
inc ebx
|
|||
|
cmp ebx,[MaxNumIcon]
|
|||
|
jb .SearchSect
|
|||
|
|
|||
|
mov eax,1
|
|||
|
pop esi edi ebx
|
|||
|
ret
|
|||
|
|
|||
|
.IcoDataFound:
|
|||
|
or ecx,-1
|
|||
|
repne scasb
|
|||
|
repne scasb
|
|||
|
repne scasb
|
|||
|
|
|||
|
movzx eax,word[edi+2]
|
|||
|
test eax,8000h
|
|||
|
jz @f
|
|||
|
or eax,0FFFF0000h
|
|||
|
@@:
|
|||
|
|
|||
|
stdcall [ini_set_int],[f_name],[sec_name],keyX,eax
|
|||
|
|
|||
|
movzx eax,word[edi]
|
|||
|
test eax,8000h
|
|||
|
jz @f
|
|||
|
or eax,0FFFF0000h
|
|||
|
@@:
|
|||
|
|
|||
|
stdcall [ini_set_int],[f_name],[sec_name],keyY,eax
|
|||
|
|
|||
|
mov eax,1
|
|||
|
pop esi edi ebx
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
|
|||
|
|