Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3852 → Rev 3853

/programs/system/icon_new/@ICON.ASM
0,0 → 1,1453
;  ¯®â®¬: ¤®¡ ¢¨â § £à㧪ã ico ¨ ¢®§¬®¦­®áâì ¢ë¡®à  ¨ª®­ª¨ ­¥ ¨§ iconstrp
 
ICONS_DAT equ '/rd/1/icons.dat'
ICON_STRIP equ '/rd/1/iconstrp.png'
ICON_SIZE equ 68
IMG_SIZE equ 32
TEXT_BOTTOM_Y equ 14
IMAGE_TOP_Y equ 10 ;>=1
ALIGN_SIZE equ 68
NAME_LENGTH equ 11
MIN_NO_MOVING equ 8
;¤«ï ¤¨ «®£  ᮧ¤ ­¨ï/। ªâ¨à®¢ ­¨ï
ICONSX equ 20
ICONSY equ 100
ICONS_DRAW_COUNTW equ 10 ;ª®«¨ç¥á⢮ ¨ª®­®ª ¢ è¨à¨­ã
ICONS_DRAW_COUNTH equ 2 ;ª®«¨ç¥á⢮ ¨ª®­®ª ¢ ¢ëá®âã
SPCW equ 3 ;¯à®¡¥« ¬¥¦¤ã ¨ª®­ª ¬¨ ¯® £®à¨§®­â «¨
SPCH equ 3
END_ICONS_AREAW equ ICONSX+(IMG_SIZE+SPCW)*ICONS_DRAW_COUNTW-SPCW
END_ICONS_AREAH equ ICONSY+(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH-SPCH
 
 
 
SizeData equ bufStdIco+32
BegData equ fiStdIco.point
;------------------------------------------------------------------------------
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd ENDMEM ; memory for app
dd stack_area ; esp
dd 0 ; boot parameters
dd 0 ; path
;------------------------------------------------------------------------------
include 'lang.inc'
include '../../macros.inc'
include '../../proc32.inc'
;include '../../API.inc'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../dll.inc'
;include '../../debug.inc'
 
;------------------------------------------------------------------------------
START: ; start of execution
mcall 68,11
stdcall dll.Load,IMPORTS
test eax,eax
jnz ErrLoadLibs
 
; unpack deflate
mov eax,[unpack_DeflateUnpack2]
mov [deflate_unpack],eax
;---------------------------------------------------------------------
; get size of file ICONSTRP.PNG
mcall 70,fiStdIco
test eax,eax
jnz ErrorStrp
; get memory for ICONSTRP.PNG
mov ecx,dword[bufStdIco+32]
mov [fiStdIco.size],ecx
mov [img_size],ecx
mcall 68,12
mov [fiStdIco.point],eax
mov [image_file],eax
; load ICONSTRP.PNG
mov dword[fiStdIco],0
mcall 70,fiStdIco
test eax,eax
jnz close
; convert PNG to RAW
xor eax,eax
mov [return_code],eax
;int3
 
push image_file
call [cnv_png_import.Start]
 
mov eax,[raw_pointer]
mov ebx,[eax+32]
mov [strip_file_size],ebx
mov eax,[eax+28]
add eax,[raw_pointer]
mov [strip_file],eax
; back memory to system
mcall 68,13,[fiStdIco.point]
 
mov eax,[raw_pointer]
mov eax,[eax+8]
shr eax,5
mov [icon_count],eax
 
and eax,0x7
mov [cur_band_compensation],eax
 
;########## § £à㦠¥¬ ¤ ­­ë¥ ¨ª®­®ª ¢ ¯ ¬ïâì ##########################
 
mcall 70,fiIni ;¢ë¤¥«ï¥¬ ¯ ¬ïâì, ¤®áâ â®ç­®© ¤«ï åà ­¥­¨ï ini ä ©« . …ñ â®ç­® 墠â¨â ¤«ï åà ­¥­¨ï ¤ ­­ëå ®¡ ¨ª®­ª å
test eax,eax
jnz ErrorIni
 
cmp dword[bufIni+32],0
je ErrorIni
mcall 68,12,dword[bufIni+32]
mov dword[BegData],eax
jmp NoErrIni
 
ErrorIni:
mcall 70,fiRunProg
mcall -1
 
NoErrIni:
m2m [PIcoDB],[BegData]
 
stdcall [ini_enum_sections],IconIni,LoadIconsData
;int3
mov eax,dword[PIcoDB]
sub eax,[BegData]
mov dword[SizeData],eax
mov eax,[BegData]
cmp eax,[PIcoDB]
jne @f
mov dword[eax],0
mov dword[SizeData],0
@@:
;######################################################################
 
call FillIconsOffs
 
mcall 40,0110000b
 
mov eax,[icon_count]
mov bl,ICONS_DRAW_COUNTH
div bl
test ah,ah
jz @f
inc al
@@:
and eax,0FFh
mov [sbIcons.max_area],eax
 
; int3
; mov eax,1
; mov eax,[IconsOffs+eax*4]
; stdcall [ini_del_section],IconIni,eax
; ret
jmp MSGRedrawIcons
 
messages:
mcall 10
sub eax,5
jz MSGRedrawIcons
dec eax
jz MSGMouse
 
jmp messages
 
MSGRedrawIcons:
 
mcall 48,5
mov dx,ax
shr eax,16
sub dx,ax
mov [ScreenX],dx
mov ax,bx
shr ebx,16
sub ax,bx
mov [ScreenY],ax
 
mov ecx,[MaxNumIcon]
test ecx,ecx
jz .NoDraw
xor ebx,ebx
@@: push ecx
stdcall DrawIcon,ebx,0
inc ebx
pop ecx
loop @b
.NoDraw:
jmp messages
 
MSGMouse:
mcall 37,0 ;GetMousePos
xor ebx,ebx
mov bx,ax
shr eax,16
mov ecx,ebx
mov ebx,eax
 
mcall 34
cmp eax,1
jne messages
 
cmp [RButtonActiv],1
je messages
 
mov [MouseY],ecx
mov [MouseX],ebx
 
 
mcall 37,2
test al,001b
jnz LButtonPress
test al,010b
jnz RButtonPress
jmp messages
 
ErrLoadLibs:
;dps '¥ 㤠«®áì § £à㧨âì ­¥®¡å®¤¨¬ë¥ ¡¨¡«¨®â¥ª¨'
;debug_newline
jmp close
ErrorStrp:
;dps 'Žè¨¡ª  ®âªàëâ¨ï iconstrp.png'
;debug_newline
close:
mcall -1
 
LButtonPress:
stdcall GetNumIcon,[MouseX],[MouseY],-1
;int3
cmp eax,-1
jnz @f
 
WaitLB1:
mcall 37,2
test al,001b
jz messages
;Yield
mcall 5,1
jmp WaitLB1
 
 
@@:
push eax
stdcall DrawIcon,eax,1
WaitLB:
mcall 37,2
test al,001b
jz endWaitLB
 
mcall 37,0
xor ebx,ebx
mov bx,ax
shr eax,16
sub eax,[MouseX]
jns @f
neg eax
@@:
sub ebx,[MouseY]
jns @f
neg ebx
@@:
cmp [bFixIcons],0
jne @f
cmp eax,MIN_NO_MOVING
ja MovingIcon
cmp ebx,MIN_NO_MOVING
ja MovingIcon
@@:
;Yield
mcall 5,1 ;Sleep 1
jmp WaitLB
endWaitLB:
 
mcall 37,0
xor ebx,ebx
mov bx,ax
shr eax,16
mov ecx,ebx
mov ebx,eax
mov [MouseX],ebx
mov [MouseY],ecx
 
stdcall GetNumIcon,[MouseX],[MouseY],-1
cmp eax,[esp] ;[esp] = ­®¬¥à ¨ª®­ª¨
jne @f
 
mov edi,[IconsOffs+eax*4]
or ecx,-1
xor al,al
repne scasb
mov ebx,edi
repne scasb
;run program
mov dword[fiRunProg+8],edi
mov dword[fiRunProg+21],ebx
mcall 70,fiRunProg
test eax,80000000h
jz @f
 
mov dword[fiRunProg+8],ErrRunProg
mov dword[fiRunProg+21],pthNotify
mcall 70,fiRunProg
 
@@:
pop eax
stdcall RestoreBackgrnd,eax
jmp messages
 
;-------------------------------------------------------------------------------
MovingIcon:
stdcall GetNumIcon,[MouseX],[MouseY],-1
mov [SelIcon],eax
stdcall RestoreBackgrnd,[SelIcon]
 
; mov ecx,[MaxNumIcon]
; xor ebx,ebx
; .MI: push ecx
; cmp ebx,[SelIcon]
; je @f
; stdcall DrawIcon,ebx,0
; @@:
; inc ebx
; pop ecx
; loop .MI
 
 
 
;dps 'Moving'
;debug_newline
; mov edi,[SelIcon]
; mov edi,[IconsOffs+edi*4]
; or ecx,-1
; xor al,al
; repne scasb
; repne scasb
; repne scasb
; repne scasb
; xor ebx,ebx
; xor esi,esi
; mov bx,word[edi+2]
; mov si,word[edi]
; stdcall GetNumIcon,ebx,esi,[SelIcon]
; cmp eax,-1
; je @f
; dps 'Q'
; stdcall DrawIcon,eax,0
; @@:
;
; add ebx,ICON_SIZE-1
; stdcall GetNumIcon,ebx,esi,[SelIcon]
; cmp eax,-1
; je @f
; dps 'Q'
; stdcall DrawIcon,eax,0
;
; @@:
; add esi,ICON_SIZE-1
; stdcall GetNumIcon,ebx,esi,[SelIcon]
; cmp eax,-1
; je @f
; dps 'Q'
; stdcall DrawIcon,eax,0
;
; @@:
; sub ebx,ICON_SIZE-1
; stdcall GetNumIcon,ebx,esi,[SelIcon]
; cmp eax,-1
; je @f
; dps 'Q'
; stdcall DrawIcon,eax,0
; @@:
 
 
; Sleep 40
 
;qweqwe:
 
mov [MovingActiv],1
mcall 51,1,MovingWnd,stack_dlg ;CreateThread MovingWnd,stack_dlg
.WaitLB:
mcall 37,2 ;GetMouseKey
test al,001b
jz .endWaitLB
 
;Yield
mcall 5,1 ;Sleep 1
jmp .WaitLB
.endWaitLB:
mov [MovingActiv],0
 
mcall 37,0 ;GetMousePos
xor ebx,ebx
mov bx,ax
shr eax,16
 
add ebx,7
dec eax
 
sub eax,ICON_SIZE/2
jns @f
xor eax,eax
@@:
sub ebx,ICON_SIZE/2
jns @f
xor ebx,ebx
@@:
 
movzx edx,[ScreenX]
sub edx,ICON_SIZE
cmp eax,edx
jbe @f
mov eax,edx
@@:
 
movzx edx,[ScreenY]
sub edx,ICON_SIZE
cmp ebx,edx
jbe @f
mov ebx,edx
@@:
 
xor edx,edx
mov dx,[ScreenX]
shr edx,1
cmp eax,edx
jbe @f
sub ax,[ScreenX]
inc ax
@@:
 
xor edx,edx
mov dx,[ScreenY]
shr edx,1
cmp ebx,edx
jbe @f
sub bx,[ScreenY]
inc bx
@@:
 
stdcall SetPosition,[SelIcon],eax,ebx
mcall 15,3
 
m2m [PIcoDB],[BegData]
stdcall [ini_enum_sections],IconIni,Ini_SavePos ;in RButton.inc
 
; mov dword[fInfo],2
; mcall 70,fInfo
 
mov [bNotSave],1
 
jmp messages
 
;-------------------------------------------------------------------------------
 
RButtonPress:
cmp [RButtonActiv],1
je messages
mov [RButtonActiv],1
 
@@:
mcall 37,2 ;GetMouseKey
test al,010b
jz @f
mcall 5,1 ;Yield
jmp @b
@@:
 
mcall 51,1,RButtonWin,stack_dlg ;CreateThread RButtonWin,stack_dlg
 
jmp messages
 
 
;###############################################################################
;ret eax = 1/0 = 㤠ç /®è¨¡ª 
proc DrawIcon NumIcon:DWORD,Activ:DWORD ;NumIcon = 0..n
local IconData:DWORD
; int3
push ebx edi esi
 
mov ecx,ICON_SIZE*ICON_SIZE
xor eax,eax
;mov eax,0FFFFFFFh
mov edi,IconArea
rep stosd
 
mov eax,[NumIcon]
cmp eax,[MaxNumIcon]
jb @f
xor eax,eax
pop esi edi ebx
ret
@@:
 
mov esi,[IconsOffs+eax*4]
mov [IconData],esi
 
;à¨á㥬 ⥪áâ
mov edi,esi
xor al,al
or ecx,-1
repne scasb
mov edx,esi
mov eax,edi
sub eax,esi
dec eax
shl eax,1 ;*6
lea eax,[eax*2+eax]
mov ebx,ICON_SIZE
sub ebx,eax
shr ebx,1 ;ebx = x ⥪áâ 
shl ebx,16
mov bx,ICON_SIZE
sub bx,TEXT_BOTTOM_Y
mov ecx,88000000h
mov edi,IconAreaH
add ebx,-1*10000h+0
mcall 4
add ebx,2*10000h+0
mcall 4
add ebx,-1*10000h-1
mcall 4
add ebx,0*10000h+2
mcall 4
add ebx,1*10000h+0
mcall 4
add ebx,0*10000h+1
mcall 4
add ebx,-1*10000h+0
mcall 4
add ebx,0*10000h-2
mov ecx,88FFFFFFh
mcall 4
;à¨á㥬 ª à⨭ªã
 
mov edi,esi
xor al,al
or ecx,-1
repne scasb
repne scasb
repne scasb
mov al,[edi]
cmp al,'9'
ja PathToIcon
cmp al,'/'
jne GetIconInd
 
PathToIcon:
;stdcall LoadIcon,edi
;mov esi,eax
mov al,30h ;§ £«ã誠!!!!!!!!!!!!!
mov byte[edi+1],0
 
jmp CopyToMem
GetIconInd:
 
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,0+4*11
 
CopyToMem:
mov edi,IconArea+((IMAGE_TOP_Y*ICON_SIZE)+((ICON_SIZE-IMG_SIZE)/2))*4
 
mov eax,IMG_SIZE
mov edx,eax
@@:
mov ecx,eax
rep movsd
add edi,(ICON_SIZE-IMG_SIZE)*4
dec edx
jnz @b
 
;-----------------
;¥á«¨ ­ ¤®, â® à¨á㥬 ®¡¢®¤ªã
cmp [Activ],0
je .NoSelect
 
mov edi,IconArea
mov eax,0FF000000h
mov ecx,ICON_SIZE
rep stosd
;mov edi,IconArea+ICON_SIZE*1
 
mov ecx,ICON_SIZE-1
@@: mov dword[edi],eax
add edi,(ICON_SIZE)*4
loop @b
 
mov edi,IconArea+ICON_SIZE*2*4-4
mov ecx,ICON_SIZE-1
@@: mov dword[edi],eax
add edi,(ICON_SIZE)*4
loop @b
 
mov edi,IconArea+ICON_SIZE*(ICON_SIZE-1)*4+4
mov ecx,ICON_SIZE-2
rep stosd
 
 
mov edi,IconArea+ICON_SIZE*4+4
mov eax,0FFFFFFFFh
mov ecx,ICON_SIZE-2
rep stosd
 
mov edi,IconArea+ICON_SIZE*4+4
mov ecx,ICON_SIZE-2
@@: mov dword[edi],eax
add edi,(ICON_SIZE)*4
loop @b
 
mov edi,IconArea+ICON_SIZE*2*4-4*2
mov ecx,ICON_SIZE-3
@@: mov dword[edi],eax
add edi,(ICON_SIZE)*4
loop @b
 
mov edi,IconArea+ICON_SIZE*(ICON_SIZE-2)*4+4*2
mov ecx,ICON_SIZE-3
rep stosd
;--------------
 
.NoSelect:
mov edi,[IconData]
xor al,al
or ecx,-1
repne scasb
repne scasb
repne scasb
repne scasb
mov edx,[edi]
 
test edx,00008000h
jz @f
add dx,[ScreenY]
@@:
test edx,80000000h
jz @f
rol edx,16
add dx,[ScreenX]
rol edx,16
@@:
 
mov ebx,IconArea
mov ecx,ICON_SIZE*10000h+ICON_SIZE
mcall 25
 
; mov eax,1
pop esi edi ebx
ret
endp
 
 
 
proc RestoreBackgrnd,NumIcon:DWORD
push ebx edi
mov eax,[NumIcon]
cmp eax,[MaxNumIcon]
jb @f
xor eax,eax
pop edi ebx
ret
@@:
 
mov edi,[IconsOffs+eax*4]
xor al,al
or ecx,-1
repne scasb
repne scasb
repne scasb
repne scasb
 
mov ax,[edi+2]
test ax,8000h
jz @f
add ax,[ScreenX]
@@:
 
mov bx,[edi]
test bx,8000h
jz @f
add bx,[ScreenY]
@@:
 
mov cx,ax
shl ecx,16
add ax,ICON_SIZE
mov cx,ax
mov dx,bx
shl edx,16
add bx,ICON_SIZE
mov dx,bx
dec ecx
dec edx
mcall 15,9
pop edi ebx
ret
endp
 
;ret eax=numIcon
proc AddIcon stdcall,x,y,lpIcon,lpName,lpExeFile,lpParams
push ebx edi esi
 
mov eax,[x]
mov ebx,[y]
 
xor edx,edx
test eax,8000h
jnz @f
mov dx,[ScreenX] ;¥á«¨ ­ ¤®, â® ¯à¥®¡à §®¢ë¢ ¥¬ ¢
shr edx,1 ;®âà¨æ â¥«ì­ë¥ ª®®à¤¨­ âë
cmp eax,edx
jbe @f
sub ax,[ScreenX]
inc eax
@@:
 
test ebx,8000h
jnz @f
mov dx,[ScreenY]
shr edx,1
cmp ebx,edx
jbe @f
sub bx,[ScreenY]
inc ebx
@@:
;¯®¯à ¢ª  ­  á«ãç © ¢ë室  §  ªà © íªà ­ 
 
test eax,8000h
jnz @f
mov dx,[ScreenX]
sub edx,ICON_SIZE
cmp eax,edx
jbe @f
mov eax,edx
@@:
 
test ebx,8000h
jnz @f
mov dx,[ScreenY]
sub edx,ICON_SIZE
cmp ebx,edx
jbe @f
mov ebx,edx
@@:
 
mov [x],eax
mov [y],ebx
 
xor al,al
or ecx,-1
mov edi,[lpName]
repne scasb
sub edi,[lpName]
mov ebx,edi
mov edi,[lpExeFile]
repne scasb
sub edi,[lpExeFile]
add ebx,edi
mov edi,[lpParams]
repne scasb
sub edi,[lpParams]
add ebx,edi
mov edi,[lpIcon]
repne scasb
sub edi,[lpIcon]
add ebx,edi
add ebx,4
mov ecx,dword[SizeData]
add ecx,ebx
mov edx,[IconsOffs]
mcall 68,20
 
mov edx,dword[SizeData]
mov dword[SizeData],ecx
mov dword[BegData],eax
mov edi,eax
add edi,edx
mov esi,[lpName]
@@: lodsb
stosb
test al,al
jnz @b
 
mov esi,[lpExeFile]
@@: lodsb
stosb
test al,al
jnz @b
 
mov esi,[lpParams]
@@: lodsb
stosb
test al,al
jnz @b
 
mov esi,[lpIcon]
@@: lodsb
stosb
test al,al
jnz @b
 
mov eax,[x]
mov ebx,[y]
shl eax,16
mov ax,bx
mov dword[edi],eax
 
stdcall FillIconsOffs
 
pop esi edi ebx
ret
endp
 
 
proc EditIcon stdcall,NumIcon,lpIcon,lpName,lpExeFile,lpParams
push edi
mov eax,[NumIcon]
mov edi,[IconsOffs+eax*4]
xor al,al
or ecx,-1
repne scasb
repne scasb
repne scasb
repne scasb
push dword[edi]
stdcall DelIcon,[NumIcon]
pop edx
xor eax,eax
mov ax,dx
shr edx,16
stdcall AddIcon,edx,eax,DAreaIcon,DAreaName,DAreaPath,DAreaParams
pop edi
ret
endp
 
proc SetPosition stdcall,NumIcon,x,y
push edi
mov eax,[NumIcon]
mov edi,[IconsOffs+eax*4]
xor al,al
or ecx,-1
repne scasb
repne scasb
repne scasb
repne scasb
mov eax,[x]
shl eax,16
mov ax,word[y]
mov dword[edi],eax
pop edi
ret
endp
 
proc GetNumIcon stdcall,x,y,NumIconI ;­®¬¥à ¨ª®­ª¨, ª®â®àë© ¯à®¢¥àïâì ­¥ ­ ¤® ¨«¨ -1
local posX:WORD,\
posY:WORD
push ebx edi
mov ecx,[MaxNumIcon]
test ecx,ecx
jnz @f
or eax,-1
pop edi ebx
ret
@@:
 
xor ebx,ebx
.TestIcon:
cmp dword[NumIconI],-1
je @f
 
cmp ebx,[NumIconI]
jne @f
inc ebx
dec ecx
test ecx,ecx
jz .NoIcon
@@:
 
push ecx
 
or ecx,-1
xor al,al
mov edi,[IconsOffs+ebx*4]
repne scasb
repne scasb
repne scasb
repne scasb
 
mov ax,[edi+2]
test ax,8000h
jz @f
add ax,[ScreenX]
@@:
mov [posX],ax
 
mov ax,[edi]
test ax,8000h
jz @f
add ax,[ScreenY]
@@:
mov [posY],ax
 
mov eax,[x]
mov edx,[y]
 
cmp ax,[posX]
jb @f
add word[posX],ICON_SIZE
cmp ax,[posX]
ja @f
 
cmp dx,[posY]
jb @f
add word[posY],ICON_SIZE
cmp dx,[posY]
ja @f
 
jmp .OkIcon
@@:
 
inc ebx
pop ecx
 
;loop .TestIcon
dec ecx
jnz .TestIcon
jmp .NoIcon
.OkIcon:
mov eax,ebx
pop edi ebx
ret
.NoIcon:
or eax,-1
pop edi ebx
ret
endp
 
proc DelIcon stdcall,NumIcon
push ebx edi esi
 
cmp [MaxNumIcon],0
je .end
 
cmp [MaxNumIcon],1
je .OhneIco
 
mov ebx,[NumIcon]
 
mov eax,[MaxNumIcon]
dec eax
mov [MaxNumIcon],eax
cmp ebx,eax
je @f
 
shl ebx,2
 
mov ecx,dword[BegData]
add ecx,dword[SizeData]
sub ecx,[IconsOffs+4+ebx]
 
mov edx,[IconsOffs+4+ebx]
sub edx,[IconsOffs+ebx]
sub dword[SizeData],edx
 
mov esi,[IconsOffs+4+ebx]
mov edi,[IconsOffs+ebx]
rep movsb
jmp .endDel
 
@@:
mov ecx,dword[BegData]
add ecx,dword[SizeData]
sub ecx,[IconsOffs+ebx*4]
sub dword[SizeData],ecx
 
.endDel:
stdcall FillIconsOffs
jmp .end
 
.OhneIco:
mov edi,[BegData]
mov [SizeData],0
mov dword[edi],0
mov [MaxNumIcon],0
mov dword[IconsOffs],0
.end:
mcall 15,3
pop esi edi ebx
ret
endp
;§ ¯®«­ï¥â MaxNumIcon,IconsOffs
proc FillIconsOffs
push ebx edi
mov edi,[BegData]
mov dword[MaxNumIcon],0
cmp dword[edi],0
jne @f
mov dword[IconsOffs],0
pop edi ebx
ret
@@:
 
mov [IconsOffs],edi
xor al,al
xor edx,edx
mov ebx,dword[SizeData]
add ebx,dword[BegData]
or ecx,-1
.CalcNumIc:
repne scasb
repne scasb
repne scasb
repne scasb
add edi,4
mov dword[IconsOffs+edx+4],edi
inc dword[MaxNumIcon]
add edx,4
 
cmp edi,ebx
jae @f
jmp .CalcNumIc
@@:
 
mov dword[IconsOffs+edx],0
pop edi ebx
ret
endp
 
proc LoadIconsData stdcall,f_name,sec_name
push ebx esi edi
 
mov edi,secRButt
mov esi,[sec_name]
@@: lodsb
scasb
jnz .lid1
test al,al
jnz @b
 
mov eax,1
pop edi esi ebx
ret
.lid1:
 
mov edi,[PIcoDB]
mov esi,[sec_name]
@@: lodsb
stosb
test al,al
jnz @b
 
stdcall [ini_get_str],[f_name],[sec_name],keyPath,edi,4096,0
test eax,eax
jz @f
xor eax,eax
pop edi esi ebx
ret
@@:
xor al,al
or ecx,-1
repne scasb
 
stdcall [ini_get_str],[f_name],[sec_name],keyParams,edi,4096,0
test eax,eax
jz @f
xor eax,eax
pop edi esi ebx
ret
@@:
xor al,al
or ecx,-1
repne scasb
 
stdcall [ini_get_str],[f_name],[sec_name],keyIco,edi,4096,0
test eax,eax
jz @f
xor eax,eax
pop edi esi ebx
ret
@@:
xor al,al
or ecx,-1
repne scasb
 
stdcall [ini_get_int],[f_name],[sec_name],keyX,80000000h
cmp eax,80000000h
jne @f
xor eax,eax
pop edi esi ebx
ret
@@:
mov word[edi+2],ax
 
stdcall [ini_get_int],[f_name],[sec_name],keyY,80000000h
cmp eax,80000000h
jne @f
xor eax,eax
pop edi esi ebx
ret
@@:
mov word[edi],ax
add edi,4
mov [PIcoDB],edi
 
mov eax,1
pop edi esi ebx
ret
endp
 
include 'RButton.inc'
include 'DlgAdd.inc'
include 'Moving.inc'
;include 'Ico.inc'
 
;'Eolite',0,'/sys/File managers/eolite',0,'/hd0/3/Muzik',0,'1',0,00010001h
;-------------------------------------------------------------------------------
;##### DATA ####################################################################
;-------------------------------------------------------------------------------
; not change this section!!!
; start section
;------------------------------------------------------------------------------
align 4
image_file dd 0 ;+0
raw_pointer dd 0 ;+4
return_code dd 0 ;+8
img_size dd 0 ;+12
deflate_unpack dd 0 ;+16 ; not use for scaling
raw_pointer_2 dd 0 ;+20 ; not use for scaling
;------------------------------------------------------------------------------
; end section
;------------------------------------------------------------------------------
 
 
align 4
fiStdIco:
dd 5
dd 0
dd 0
.size dd 0
.point dd bufStdIco
db ICON_STRIP,0
 
 
align 4
fiRunProg: ;¤«ï § ¯ã᪠ ¯à®£à ¬¬
dd 7
dd 0
dd 0
dd 0
dd ErrNotFoundIni
db 0
dd pthNotify
 
fiIni dd 5 ;¤«ï ini ä ©« 
dd 0
dd 0
dd 0
dd bufIni
db '/rd/1/icon.ini',0
 
 
IconsFile db ICON_STRIP,0
NameIconsDat db ICONS_DAT,0
align 4
MaxNumIcon dd 0 ;ª®«¨ç¥á⢮ ¨ª®­®ª
 
bFixIcons dd 1
bNotSave dd 0
 
LButtonActiv dd 0
RButtonActiv dd 0
MovingActiv dd 0
 
IconIni db '/rd/1/icon.ini',0
 
 
;keyName db 'name',0
keyPath db 'path',0
keyParams db 'param',0
keyIco db 'ico',0
keyX db 'x',0
keyY db 'y',0
 
;-------------------------------------------------------------------------------
IMPORTS:
library cnv_png,'cnv_png.obj',\
archiver,'archiver.obj',\
box_lib,'box_lib.obj',\
proc_lib,'proc_lib.obj',\
libini,'libini.obj'
 
import cnv_png,\
cnv_png_import.Start,'START',\
cnv_png_import.Version,'version',\
cnv_png_import.Check,'Check_Header',\
cnv_png_import.Assoc,'Associations'
 
import archiver,\
unpack_DeflateUnpack2,'deflate_unpack2'
 
import box_lib,\
edit_box_draw,'edit_box',\
edit_box_key,'edit_box_key',\
edit_box_mouse,'edit_box_mouse',\
scrollbar_h_draw,'scrollbar_h_draw',\
scrollbar_h_mouse,'scrollbar_h_mouse'
 
import proc_lib,\
OpenDialog_Init,'OpenDialog_init',\
OpenDialog_Start,'OpenDialog_start'
 
import libini,\
ini_enum_sections,'ini_enum_sections',\
ini_enum_keys,'ini_enum_keys',\
ini_get_str,'ini_get_str',\
ini_set_str,'ini_set_str',\
ini_get_color,'ini_get_color',\
ini_get_int,'ini_get_int',\
ini_set_int,'ini_set_int',\
ini_del_section,'ini_del_section'
 
 
;ini.get_str (f_name, sec_name, key_name, buffer, buf_len, def_val)
;ini.set_str (f_name, sec_name, key_name, buffer, buf_len)
 
 
;-------------------------------------------------------------------------------
;----- RButton.inc -------------------------------------------------------------
;-------------------------------------------------------------------------------
secRButt db 'rbmenu',0
 
if lang eq ru
RMenuRedrawFon db '¥à¥à¨á®¢ âì',0
RMenuAlign db '‚ë஢­ïâì ¯® á¥âª¥',0
RMenuAdd db '„®¡ ¢¨âì',0
RMenuDel db '“¤ «¨âì',0
RMenuProp db '‘¢®©á⢠',0
RMenuOffMoving db '‡ ªà¥¯¨âì ¨ª®­ª¨',0
RMenuOnMoving db 'Žâªà¥¯¨âì ¨ª®­ª¨',0
 
else
 
RMenuRedrawFon db 'Redraw',0
RMenuAlign db 'Snap to Grid',0
RMenuAdd db 'Add',0
RMenuDel db 'Delete',0
RMenuProp db 'Properties',0
RMenuOffMoving db 'Fix the icons',0
RMenuOnMoving db 'Unfix the icons',0
 
end if
 
if lang eq ru
 
ErrRunProg db 'Žè¨¡ª  § ¯ã᪠ ¯à®£à ¬¬ë',0
WarningSave db '¥ § ¡ã¤ì⥠á®åà ­¨âì ¨§¬¥­¥­¨ï, § ¯ãáâ¨âì RDSave',0
ErrNotFoundIni db '¥ ­ ©¤¥­ icon.ini',0
 
else
 
ErrRunProg db 'Error runing program',0
WarningSave db 'Do not forget to save the changes, run the RDSave',0
ErrNotFoundIni db 'icon.ini not found',0
 
end if
 
 
pthNotify db '/rd/1/@notify',0
 
;-------------------------------------------------------------------------------
;------- AddDlg.inc ---------------------------------------------------------------
;-------------------------------------------------------------------------------
if lang eq ru
DTitle db '„®¡ ¢¨âì ¨ª®­ªã',0
 
DCaptName db 'ˆ¬ï',0
DCaptPath db 'ãâì',0
DCaptParams db ' à ¬¥âàë',0
DCaptIcon db 'ˆª®­ª ',0
;DCaptChange db '.',0
DCaptCreate db '‘®§¤ âì',0
DCaptProperties db 'ˆ§¬¥­¨âì',0
DCaptCancel db 'Žâ¬¥­¨âì',0
 
else
DTitle db 'Add icon',0
 
DCaptName db 'Name',0
DCaptPath db 'Path',0
DCaptParams db 'Parameters',0
DCaptIcon db 'Icon',0
;DCaptChange db '.',0
DCaptCreate db 'Create',0
DCaptProperties db 'Change',0
DCaptCancel db 'Cancel',0
end if
 
;/­¥ ¬¥­ïâì ¯®«®¦¥­¨¥
edtName edit_box NAME_LENGTH*6+4,70+20+IMG_SIZE,6,0FFFFFFh,06F9480h,0FFh,0h,0,NAME_LENGTH,\
DAreaName,mouse_dd,0,0,0
edtExePath edit_box 281-3-20-IMG_SIZE,70+20+IMG_SIZE,26,0FFFFFFh,06F9480h,0FFh,0h,0,256,\
DAreaPath,mouse_dd,0,0,0
edtParams edit_box 295-20-IMG_SIZE,70+20+IMG_SIZE,46,0FFFFFFh,06F9480h,0FFh,0h,0,256,\
DAreaParams,mouse_dd,0,0,0
edtIcon edit_box 295-20-IMG_SIZE,70+20+IMG_SIZE,66,0FFFFFFh,06F9480h,0FFh,0h,0,256,\
DAreaIcon,mouse_dd,0,0,0
endEdits:
;\
 
sbIcons:
dw END_ICONS_AREAW-ICONSX
dw ICONSX
dw 15
dw END_ICONS_AREAH+3
dd 0
dd 1
.max_area dd 0
.cur_area dd ICONS_DRAW_COUNTW
.position dd 0
.bckg_col dd 0
.frnt_col dd 0
.line_col dd 0
.redraw dd 0
.delta dd 0
.delta2 dd 0
.r_size_x dw 0
.r_start_x dw 0
.r_size_y dw 0
.r_start_y dw 0
.m_pos dd 0
.m_pos2 dd 0
.m_keys dd 0
.run_size dd 0
.position2 dd 0
.work_size dd 0
.all_redraw dd 0
.ar_offset dd 0
 
;-------------------------------------------------------------------------------
OpenDialog_data:
.type dd 0
.procinfo dd RBProcInfo ;+4
.com_area_name dd communication_area_name ;+8
.com_area dd 0 ;+12
.opendir_pach dd temp_dir_pach ;+16
.dir_default_pach dd communication_area_default_pach ;+20
.start_path dd open_dialog_path ;+24
.draw_window dd DRedraw;draw_window_for_OD ;+28
.status dd 0 ;+32
.openfile_pach dd DAreaPath;fname_Info ;+36
.filename_area dd 0;DAreaPath ;+40
.filter_area dd Filter
.x:
.x_size dw 420 ;+48 ; Window X size
.x_start dw 100 ;+50 ; Window X position
.y:
.y_size dw 320 ;+52 ; Window y size
.y_start dw 100 ;+54 ; Window Y position
 
communication_area_name:
db 'FFFFFFFF_open_dialog',0
open_dialog_path:
db '/sys/File managers/opendial',0
 
communication_area_default_pach:
db '/sys',0
 
Filter dd 0
 
;open_dialog db 0
;-------------------------------------------------------------------------------
 
;/­¥ à §¤¥«ïâì
align 4
IconAreaH dd ICON_SIZE,ICON_SIZE
I_END:
;##### UDATA ###################################################################
IconArea rb 4*ICON_SIZE*ICON_SIZE
;\
 
ScreenX rw 1
ScreenY rw 1
 
MouseX rd 1
MouseY rd 1
 
RBSlot rd 1
 
AddX rd 1
AddY rd 1
 
SelIcon rd 1
 
sc system_colors
 
align 4
bufStdIco rb 40
IconsOffs rd 100
PIcoDB rd 1
 
align 4
icon_count rd 1
strip_file rd 1
strip_file_size rd 1
 
cur_band_compensation rd 1
 
;---- RButton -----------------------------------------------------------------------
bufIni rb 40
NumUserButt rd 1
RBUser rd 16*2+1
RMenuW rw 1
RMenuH rw 1
RMenuHsb rw 1
 
MaxPage rd 1
 
mouse_dd rd 1
 
DAreaName rb NAME_LENGTH+1
DAreaPath rb 256+1
DAreaParams rb 256+1
DAreaIcon rb 256+1
 
align 4
RBProcInfo rb 1024
align 4
 
; OpenDialog
temp_dir_pach rb 1024
fname_Info rb 1024
;-------------------------------------------------------------------------------
rb 1024
stack_dlg:
align 4
rb 1024
stack_area:
;------------------------------------------------------------------------------
ENDMEM:
/programs/system/icon_new/DLGADD.INC
0,0 → 1,633
idbChange equ 2
idbCreate equ 3
idbLeft equ 4
idbRight equ 5
idbCancel equ 1
 
DlgAdd:
DlgProp:
mov eax,[SelIcon]
cmp eax,-1
jne SetProp
 
m2m dword[AddX],dword[MouseX]
m2m dword[AddY],dword[MouseY]
 
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:
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
@@:
 
stdcall [OpenDialog_Init],OpenDialog_data
 
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 DRedraw
 
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 [edtIcon.flags],ed_focus
stdcall [edit_box_draw],edtParams
stdcall [edit_box_draw],edtIcon
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 dword[fiRunProg+8],WarningSave
mov dword[fiRunProg+21],pthNotify
mcall 70,fiRunProg
 
 
cmp [SelIcon],-1
je @f
;㤠«ï¥¬ ¨§ ini áâ àãî ¨ª®­ªã
mov ebx,[SelIcon]
mov eax,[IconsOffs+ebx*4]
stdcall [ini_del_section],IconIni,eax
 
stdcall EditIcon,[SelIcon],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:
mcall -1 ;ExitProcess
 
;##################################################################
proc DRedraw
mcall 12,1 ;RedrawWinBeg
mov edx,[sc.work]
or edx,33000000h
mcall 0,<100,400>,<100,(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH+185>,,,DTitle
 
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 [SelIcon],-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 [SelIcon],-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,IconArea
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
 
mov edx,[IcoX]
shl edx,16
mov dx,word[IcoY]
mcall 7,IconArea,<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,IconArea
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,IconArea,<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,IconArea
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,IconArea,<IMG_SIZE,IMG_SIZE>,<15,25>
 
ret
endp
/programs/system/icon_new/ICON.INI
0,0 → 1,173
[rbmenu]
Š®­á®«ì=/rd/1/shell
„¨á¯¥âç¥à ¯à®æ¥áᮢ=/rd/1/cpu
“¯à ¢«¥­¨¥ ⥬®©=desktop
 áâனª  ãáâனáâ¢=setup
[KFM]
path=/SYS/FILE MANAGERS/KFM
param=
ico=5
x=0
y=0
[TINYPAD]
path=/SYS/TINYPAD
param=
ico=9
x=0
y=68
[EOLITE]
path=/SYS/FILE MANAGERS/EOLITE
param=
ico=2
x=68
y=0
[SHELL]
path=/SYS/SHELL
param=
ico=20
x=136
y=0
[KFAR]
path=/SYS/FILE MANAGERS/KFAR
param=
ico=16
x=68
y=68
[RDSAVE]
path=/SYS/RDSAVE
param=
ico=17
x=0
y=136
[CALC]
path=/SYS/CALC
param=
ico=4
x=68
y=136
[ANIMAGE]
path=/SYS/MEDIA/ANIMAGE
param=
ico=15
x=136
y=68
[KPACK]
path=/SYS/KPACK
param=
ico=10
x=-67
y=0
[SNAKE]
path=/SYS/GAMES/SNAKE
param=
ico=3
x=-135
y=-135
[MINE]
path=/SYS/GAMES/MINE
param=
ico=14
x=-67
y=-67
[LIFE2]
path=/SYS/DEMOS/LIFE2
param=
ico=13
x=-135
y=-67
[MBLOCKS]
path=/SYS/GAMES/MBLOCKS
param=
ico=11
x=-67
y=-135
[PONG]
path=/SYS/GAMES/PONG3
param=
ico=12
x=-203
y=-67
[15]
path=/SYS/GAMES/15
param=
ico=0
x=-271
y=-67
[DOCPACK]
path=/SYS/DOCPACK
param=
ico=8
x=-67
y=68
[BOARD]
path=/SYS/DEVELOP/BOARD
param=
ico=19
x=-135
y=0
[HEXEDIT]
path=/SYS/DEVELOP/HEED
param=
ico=22
x=-67
y=136
[MTDBG]
path=/SYS/DEVELOP/MTDBG
param=
ico=6
x=-203
y=0
[PIPES]
path=/SYS/GAMES/PIPES
param=
ico=26
x=0
y=-135
[SUDOKU]
path=/SYS/GAMES/SUDOKU
param=
ico=25
x=0
y=-67
[GOMOKU]
path=/SYS/GAMES/GOMOKU
param=
ico=24
x=68
y=-67
[XONIX]
path=/SYS/GAMES/XONIX
param=
ico=21
x=68
y=-135
[CHECKERS]
path=/SYS/GAMES/CHECKERS
param=
ico=1
x=-271
y=-135
[KOSILKA]
path=/SYS/GAMES/KOSILKA
param=
ico=23
x=136
y=-67
[FLOOD-IT]
path=/SYS/GAMES/FLOOD-IT
param=
ico=27
x=136
y=-135
[FASM]
path=/SYS/DEVELOP/FASM
param=
ico=10
x=-135
y=68
[CLICKS]
path=/SYS/GAMES/CLICKS
param=
ico=18
x=513
y=287
/programs/system/icon_new/MOVING.INC
0,0 → 1,121
proc MovingWnd
local MySlot:DWORD
mcall 40,0 ;SetMaskMessage 000b
 
mcall 12,1 ;RedrawWinBeg
 
mcall 14
xor ebx,ebx
xor ecx,ecx
mov cx,ax
shr eax,16
mov cx,ax
dec ebx
dec ecx
mcall 0,,,01000000h
;mcall 0,IMG_SIZE,IMG_SIZE,01000000h
mcall 12,2 ;RedrawWinEnd
 
 
mov eax,[SelIcon]
call DrawIconToArea
 
mcall 37,4,IconArea,10100002h
push eax
test eax,eax
jz @f
mov ecx,eax
mcall 37,5
 
@@:
mcall 9,RBProcInfo,-1 ;+30
mcall 18,21,dword[RBProcInfo+30]
mov [MySlot],eax
 
.messages:
cmp [MovingActiv],1
jne .close
mcall 18,7
cmp eax,[MySlot]
je @f
mcall 18,3,[MySlot]
@@:
 
mcall 5,1 ;Yield
jmp .messages
 
.close:
pop ecx
test ecx,ecx
jz @f
mcall 37,6
@@:
 
 
mcall -1
 
endp
 
 
 
;eax = NumIcon
proc DrawIconToArea ;¯à¥¤­ §­ ç¥­ ¤«ï ¨ª®­®ª à §¬¥à®¬ = 32x32
push edi esi
 
;mov eax,[NumIcon]
mov edi,[IconsOffs+eax*4]
xor al,al
or ecx,-1
repne scasb
repne scasb
repne scasb
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 .DIA
mov ecx,eax
xor eax,eax
@@:
add eax,32*32*4;IMG_SIZE*IMG_SIZE*4
loop @b
.DIA:
mov esi,eax
add esi,[raw_pointer]
add esi,44
 
mov edi,IconArea;+((IMAGE_TOP_Y*ICON_SIZE)+((ICON_SIZE-IMG_SIZE)/2))*4
;int3
mov eax,32;IMG_SIZE
mov edx,eax
@@:
mov ecx,eax
rep movsd
; add edi,32*4
dec edx
jnz @b
 
pop esi edi
ret
endp
/programs/system/icon_new/RBUTTON.INC
0,0 → 1,545
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
 
;¯¥à¢ ï à §¤¥«¨â¥«ì­ ï «¨­¨ï
mcall 38,,,0888888h
add ecx,00010001h
mcall ,,,
 
;------------
mov ecx,[esp]
add ecx,2
shl ecx,16
mov cx,16
 
mcall 8,,,idbRRedrawFon,0888888h ;3 ª­®¯ª¨ ¢â®à®£® ¡«®ª 
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 ;¢â®à ï à §¤¥«¨â¥«ì­ ï «¨­¨ï
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 ¨«¨ 2 ª­®¯ª¨ âà¥â쥣® ¡«®ª 
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
 
;-------- ¯à¥®¡à §ã¥¬ ª®®à¤¨­ âë ¢ ¯®«®¦¨â¥«ì­ë¥
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:
 
;----- ¯à¥®¡à §®¢ ­¨¥ ­ § ¤ ¨ ¯®¯à ¢ª  ¢ ®âà¨æ â¥«ì­ëå ª®®à¤¨­ â
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] ;®¯à¥¤¥«ï¥¬ è¨à¨­ã ¬¥­î
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
 
 
 
/programs/system/icon_new/readme.txt
0,0 → 1,5
Äàííàÿ ïðîãðàììà çàìåíÿåò ñòàíäàðòíûé icon.
Äëÿ óñòàíîâêè â ñèñòåìó ñêîïèðóéòå @icon è icon.ini â ñèñòåìíûé
äèñê. Óáåðèòå èç Autorun.dat ñòðîêè ñ çàïóñêîì @rb è icon è äîáàâüòå
ñòðîêó ñ çàïóñêîì @icon (áåç ïàðàìåòðîâ, õîòÿ ýòî íå âàæíî). Ñîõðàíèòå
ñèñòåìíûé äèñê è ïåðåçàãðóçèòå. Âñ¸, ïðîãðàììà óñòàíîâëåíà.