Subversion Repositories Kolibri OS

Rev

Rev 1004 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1004 Rev 1016
1
proc dll.Load, import_table:dword
1
proc dll.Load, import_table:dword
2
		mov	esi,[import_table]
2
		mov	esi,[import_table]
3
  .next_lib:	mov	edx,[esi]
3
  .next_lib:	mov	edx,[esi]
4
		or	edx,edx
4
		or	edx,edx
5
		jz	.exit
5
		jz	.exit
6
		push	esi
6
		push	esi
7
		mov	esi,[esi+4]
7
		mov	esi,[esi+4]
8
		mov	edi,s_libdir.fname
8
		mov	edi,s_libdir.fname
9
	    @@: lodsb
9
	    @@: lodsb
10
		stosb
10
		stosb
11
		or	al,al
11
		or	al,al
12
		jnz	@b
12
		jnz	@b
13
		mcall	68,19,s_libdir
13
		mcall	68,19,s_libdir
14
		or	eax,eax
14
		or	eax,eax
15
		jz	.fail
15
		jz	.fail
16
		stdcall dll.Link,eax,edx
16
		stdcall dll.Link,eax,edx
17
		stdcall dll.Init,[eax+4]
17
		push	eax
-
 
18
		mov	eax, [eax]
-
 
19
		cmp	dword [eax], 'lib_'
-
 
20
		pop	eax
-
 
21
		jnz	@f
-
 
22
		stdcall dll.Init,[eax+4]
18
		pop	esi
23
	    @@:
-
 
24
		pop	esi
19
		add	esi,8
25
		add	esi,8
20
		jmp	.next_lib
26
		jmp	.next_lib
21
  .exit:	xor	eax,eax
27
  .exit:	xor	eax,eax
22
		ret
28
		ret
23
  .fail:	add	esp,4
29
  .fail:	add	esp,4
24
		xor	eax,eax
30
		xor	eax,eax
25
		inc	eax
31
		inc	eax
26
		ret
32
		ret
27
endp
33
endp
28
 
34
 
29
proc dll.Link, exp:dword,imp:dword
35
proc dll.Link, exp:dword,imp:dword
30
		push	eax
36
		push	eax
31
		mov	esi,[imp]
37
		mov	esi,[imp]
32
		test	esi,esi
38
		test	esi,esi
33
		jz	.done
39
		jz	.done
34
  .next:	lodsd
40
  .next:	lodsd
35
		test	eax,eax
41
		test	eax,eax
36
		jz	.done
42
		jz	.done
37
		stdcall dll.GetProcAddress,[exp],eax
43
		stdcall dll.GetProcAddress,[exp],eax
38
		or	eax,eax
44
		or	eax,eax
39
		jz	@f
45
		jz	@f
40
		mov	[esi-4],eax
46
		mov	[esi-4],eax
41
		jmp	.next
47
		jmp	.next
42
	    @@: mov	dword[esp],0
48
	    @@: mov	dword[esp],0
43
  .done:	pop	eax
49
  .done:	pop	eax
44
		ret
50
		ret
45
endp
51
endp
46
 
52
 
47
proc dll.Init, dllentry:dword
53
proc dll.Init, dllentry:dword
48
		pushad
54
		pushad
49
		mov	eax,mem.Alloc
55
		mov	eax,mem.Alloc
50
		mov	ebx,mem.Free
56
		mov	ebx,mem.Free
51
		mov	ecx,mem.ReAlloc
57
		mov	ecx,mem.ReAlloc
52
		mov	edx,dll.Load
58
		mov	edx,dll.Load
53
		stdcall [dllentry]
59
		stdcall [dllentry]
54
		popad
60
		popad
55
		ret
61
		ret
56
endp
62
endp
57
 
63
 
58
proc dll.GetProcAddress, exp:dword,sz_name:dword
64
proc dll.GetProcAddress, exp:dword,sz_name:dword
59
		mov	edx,[exp]
65
		mov	edx,[exp]
60
		xor	eax,eax
66
		xor	eax,eax
61
  .next:	or	edx,edx
67
  .next:	or	edx,edx
62
		jz	.end
68
		jz	.end
63
		cmp	dword[edx],0
69
		cmp	dword[edx],0
64
		jz	.end
70
		jz	.end
65
		stdcall strcmp,[edx],[sz_name]
71
		stdcall strcmp,[edx],[sz_name]
66
		test	eax,eax
72
		test	eax,eax
67
		jz	.ok
73
		jz	.ok
68
		add	edx,8
74
		add	edx,8
69
		jmp	.next
75
		jmp	.next
70
  .ok:		mov	eax,[edx+4]
76
  .ok:		mov	eax,[edx+4]
71
  .end: 	ret
77
  .end: 	ret
72
endp
78
endp
73
 
79
 
74
proc strcmp, str1:dword,str2:dword
80
proc strcmp, str1:dword,str2:dword
75
		push	esi edi
81
		push	esi edi
76
		mov	esi,[str1]
82
		mov	esi,[str1]
77
		mov	edi,[str2]
83
		mov	edi,[str2]
78
		xor	eax,eax
84
		xor	eax,eax
79
	    @@: lodsb
85
	    @@: lodsb
80
		scasb
86
		scasb
81
		jne	.fail
87
		jne	.fail
82
		or	al,al
88
		or	al,al
83
		jnz	@b
89
		jnz	@b
84
		jmp	.ok
90
		jmp	.ok
85
  .fail:	or	eax,-1
91
  .fail:	or	eax,-1
86
  .ok:		pop	edi esi
92
  .ok:		pop	edi esi
87
		ret
93
		ret
88
endp
94
endp
89
 
95
 
90
s_libdir:
96
s_libdir:
91
  db '/sys/lib/'
97
  db '/sys/lib/'
92
  .fname rb 32
98
  .fname rb 32