forked from KolibriOS/kolibrios
c1c36c0b6a
1) New logic of switching windows (turnoff/restore) 2) New logic of button "clear desktop". 3) Win+D (restore/clear desktop), Win+R (start RUN application). 4) Using the library LibINI to set the parameters. 5) New style of panel. 6) Start application Menu with boot options. 7) Two versions of the location of the panel - the bottom of the desktop and on top of the desktop. git-svn-id: svn://kolibrios.org@2619 a494cfbc-eb01-0410-851d-a64ba20cac60
144 lines
2.6 KiB
PHP
144 lines
2.6 KiB
PHP
;-----------------------------------------------------------------------------
|
|
proc dll.Load, import_table:dword
|
|
mov esi,[import_table]
|
|
.next_lib:
|
|
mov edx,[esi]
|
|
or edx,edx
|
|
jz .exit
|
|
push esi
|
|
mov esi,[esi+4]
|
|
mov edi,s_libdir.fname
|
|
@@:
|
|
lodsb
|
|
stosb
|
|
or al,al
|
|
jnz @b
|
|
mcall 68,19,s_libdir
|
|
or eax,eax
|
|
jz .fail
|
|
stdcall dll.Link,eax,edx
|
|
stdcall dll.Init,[eax+4]
|
|
pop esi
|
|
add esi,8
|
|
jmp .next_lib
|
|
.exit:
|
|
xor eax,eax
|
|
ret
|
|
.fail:
|
|
add esp,4
|
|
xor eax,eax
|
|
inc eax
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
proc dll.Link, exp:dword,imp:dword
|
|
push eax
|
|
mov esi,[imp]
|
|
test esi,esi
|
|
jz .done
|
|
.next:
|
|
lodsd
|
|
test eax,eax
|
|
jz .done
|
|
stdcall dll.GetProcAddress,[exp],eax
|
|
or eax,eax
|
|
jz @f
|
|
mov [esi-4],eax
|
|
jmp .next
|
|
@@:
|
|
mov dword[esp],0
|
|
.done:
|
|
pop eax
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
proc dll.Init, dllentry:dword
|
|
pushad
|
|
mov eax,mem.Alloc ;libini_alloc
|
|
mov ebx,mem.Free ;libini_free
|
|
mov ecx,mem.ReAlloc ;libini_realloc
|
|
mov edx,dll.Load
|
|
stdcall [dllentry]
|
|
popad
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
proc dll.GetProcAddress, exp:dword,sz_name:dword
|
|
mov edx,[exp]
|
|
xor eax,eax
|
|
.next:
|
|
or edx,edx
|
|
jz .end
|
|
cmp dword[edx],0
|
|
jz .end
|
|
stdcall strcmp,[edx],[sz_name]
|
|
test eax,eax
|
|
jz .ok
|
|
add edx,8
|
|
jmp .next
|
|
.ok:
|
|
mov eax,[edx+4]
|
|
.end:
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
proc strcmp, str1:dword,str2:dword
|
|
push esi edi
|
|
mov esi,[str1]
|
|
mov edi,[str2]
|
|
xor eax,eax
|
|
@@:
|
|
lodsb
|
|
scasb
|
|
jne .fail
|
|
or al,al
|
|
jnz @b
|
|
jmp .ok
|
|
.fail:
|
|
or eax,-1
|
|
.ok:
|
|
pop edi esi
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
s_libdir:
|
|
db '/sys/lib/'
|
|
.fname rb 32
|
|
;-----------------------------------------------------------------------------
|
|
proc mem.Alloc,size
|
|
push ebx ecx
|
|
mov ecx,[size]
|
|
mcall 68,12
|
|
pop ecx ebx
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
proc mem.ReAlloc,mptr,size
|
|
push ebx ecx edx
|
|
mov ecx,[size]
|
|
or ecx,ecx
|
|
jz @f
|
|
@@:
|
|
mov edx,[mptr]
|
|
or edx,edx
|
|
jz @f
|
|
@@:
|
|
mcall 68,20
|
|
or eax,eax
|
|
jz @f
|
|
@@:
|
|
pop edx ecx ebx
|
|
ret
|
|
endp
|
|
;-----------------------------------------------------------------------------
|
|
proc mem.Free,mptr
|
|
push ebx ecx
|
|
mov ecx,[mptr]
|
|
or ecx,ecx
|
|
jz @f
|
|
@@:
|
|
mcall 68,13
|
|
pop ecx ebx
|
|
ret
|
|
endp
|
|
;----------------------------------------------------------------------------- |