kolibrios-fun/programs/system/panel/trunk/dll.inc
Marat Zakiyanov (Mario79) c1c36c0b6a TASK PANEL v2.0
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
2012-04-16 23:46:54 +00:00

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
;-----------------------------------------------------------------------------