Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 278 → Rev 277

/kernel/trunk/core/dll.inc
281,31 → 281,36
 
align 4
proc get_service stdcall, sz_name:dword
locals
srv_ptr dd ?
counter dd ?
endl
 
mov eax, [sz_name]
test eax, eax
jnz @F
ret
@@:
mov edx, [srv.fd]
mov [srv_ptr], srv_tab
mov [counter], 16
@@:
cmp edx, srv.fd-SRV_FD_OFFSET
je .not_load
 
stdcall strncmp, edx, [sz_name], 16
stdcall strncmp, [srv_ptr], [sz_name], 16
test eax, eax
je .ok
 
mov edx, [edx+SRV.fd]
jmp @B
add [srv_ptr], SRV_SIZE
dec [counter]
jnz @B
.not_load:
stdcall find_service, [sz_name]
test eax, eax
jz @F
jnz @F
ret
@@:
stdcall load_driver, eax
@@:
ret
.ok:
mov eax, edx
mov eax, [srv_ptr]
ret
endp
 
338,43 → 343,40
endp
 
align 4
reg_service:
.sz_name equ esp+4
.handler equ esp+8
mov eax, [.sz_name]
proc reg_service stdcall, sz_name:dword, handler:dword
locals
srv dd ?
endl
 
mov eax, [sz_name]
test eax, eax
jz .fail
 
mov ebx, [.handler]
mov ebx, [handler]
test ebx, ebx
jz .fail
 
mov eax, SRV_SIZE
call malloc ;call alloc_service
call alloc_service
test eax, eax
jz .fail
 
mov [srv], eax
mov edi, eax
mov esi, [.sz_name]
mov ecx, 16/4
rep movsd
mov esi, [sz_name]
mov ecx, 16
rep movsb
 
mov [eax+SRV.magic], ' SRV'
mov [eax+SRV.size], SRV_SIZE
 
mov ebx, srv.fd-SRV_FD_OFFSET
mov edx, [ebx+SRV.fd]
mov [eax+SRV.fd], edx
mov [eax+SRV.bk], ebx
mov [ebx+SRV.fd], eax
mov [edx+SRV.bk], eax
 
mov ecx, [.handler]
mov [eax+SRV.srv_proc], ecx
mov edi, eax
mov [edi+SRV.magic], ' SRV'
mov [edi+SRV.size], SRV_SIZE
mov ebx, [handler]
mov [edi+SRV.srv_proc], ebx
mov eax, [srv]
ret
.fail:
xor eax, eax
ret
endp
 
align 4
proc get_proc stdcall, exp:dword, sz_name:dword
965,26 → 967,24
ret
endp
 
 
align 4
proc stop_all_services
 
mov edx, [srv.fd]
not [srv_map]
.next:
cmp edx, srv.fd-SRV_FD_OFFSET
je .done
cmp [edx+SRV.magic], ' SRV'
bsf eax, [srv_map]
jnz .find
ret
.find:
btr [srv_map], eax
shl eax,0x02
lea eax,[srv_tab+eax+eax*8] ;srv_tab+eax*36
cmp [eax+SRV.magic], ' SRV'
jne .next
cmp [edx+SRV.size], SRV_SIZE
cmp [eax+SRV.size], SRV_SIZE
jne .next
mov ebx, [edx+SRV.entry]
mov edx, [edx+SRV.fd]
push edx
mov ebx, [eax+SRV.entry]
stdcall ebx, dword -1
pop edx
jmp .next
.done:
ret
endp