Subversion Repositories Kolibri OS

Rev

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

Rev 3014 Rev 3038
1
;-----------------------------------------------------------------------------
1
;-----------------------------------------------------------------------------
2
proc dll.Load, import_table:dword
2
proc dll.Load, import_table:dword
3
	mov	esi, [import_table]
3
	mov	esi, [import_table]
4
  .next_lib:
4
  .next_lib:
5
	mov	edx, [esi]
5
	mov	edx, [esi]
6
	or	edx, edx
6
	or	edx, edx
7
	jz	.exit
7
	jz	.exit
8
	push	esi
8
	push	esi
9
	mov	esi, [esi + 4]
9
	mov	esi, [esi + 4]
10
	mov	edi, s_libdir.fname
10
	mov	edi, s_libdir.fname
11
    @@:
11
    @@:
12
	lodsb
12
	lodsb
13
	stosb
13
	stosb
14
	or	al, al
14
	or	al, al
15
	jnz	@b
15
	jnz	@b
16
	mcall	68, 19, s_libdir
16
	mcall	68, 19, s_libdir
17
	or	eax, eax
17
	or	eax, eax
18
	jz	.fail
18
	jz	.fail
19
	stdcall	dll.Link, eax, edx
19
	stdcall	dll.Link, eax, edx
-
 
20
	push	eax
-
 
21
	mov	eax, [eax]
-
 
22
	cmp	dword[eax], 'lib_'
-
 
23
	pop	eax
-
 
24
	jnz	@f
20
	stdcall	dll.Init, [eax + 4]
25
	stdcall	dll.Init, [eax + 4]
-
 
26
    @@:
21
	pop	esi
27
	pop	esi
22
	add	esi, 8
28
	add	esi, 8
23
	jmp	.next_lib
29
	jmp	.next_lib
24
  .exit:
30
  .exit:
25
	xor	eax, eax
31
	xor	eax, eax
26
	ret
32
	ret
27
  .fail:
33
  .fail:
28
	add	esp, 4
34
	add	esp, 4
29
	xor	eax, eax
35
	xor	eax, eax
30
	inc	eax
36
	inc	eax
31
	ret
37
	ret
32
endp
38
endp
33
;-----------------------------------------------------------------------------
39
;-----------------------------------------------------------------------------
34
proc dll.Link, exp:dword, imp:dword
40
proc dll.Link, exp:dword, imp:dword
35
	push	eax
41
	push	eax
36
	mov	esi, [imp]
42
	mov	esi, [imp]
37
	test	esi, esi
43
	test	esi, esi
38
	jz	.done
44
	jz	.done
39
  .next:
45
  .next:
40
	lodsd
46
	lodsd
41
	test	eax, eax
47
	test	eax, eax
42
	jz	.done
48
	jz	.done
43
	stdcall	dll.GetProcAddress, [exp], eax
49
	stdcall	dll.GetProcAddress, [exp], eax
44
	or	eax, eax
50
	or	eax, eax
45
	jz	@f
51
	jz	@f
46
	mov	[esi - 4], eax
52
	mov	[esi - 4], eax
47
	jmp	.next
53
	jmp	.next
48
    @@:
54
    @@:
49
	mov	dword[esp], 0
55
	mov	dword[esp], 0
50
  .done:
56
  .done:
51
	pop	eax
57
	pop	eax
52
	ret
58
	ret
53
endp
59
endp
54
;-----------------------------------------------------------------------------
60
;-----------------------------------------------------------------------------
55
proc dll.Init, dllentry:dword
61
proc dll.Init, dllentry:dword
56
	pushad
62
	pushad
57
	mov	eax, mem.Alloc
63
	mov	eax, mem.Alloc
58
	mov	ebx, mem.Free
64
	mov	ebx, mem.Free
59
	mov	ecx, mem.ReAlloc
65
	mov	ecx, mem.ReAlloc
60
	mov	edx, dll.Load
66
	mov	edx, dll.Load
61
	stdcall	[dllentry]
67
	stdcall	[dllentry]
62
	popad
68
	popad
63
	ret
69
	ret
64
endp
70
endp
65
;-----------------------------------------------------------------------------
71
;-----------------------------------------------------------------------------
66
proc dll.GetProcAddress, exp:dword, sz_name:dword
72
proc dll.GetProcAddress, exp:dword, sz_name:dword
67
	mov	edx, [exp]
73
	mov	edx, [exp]
68
	xor	eax, eax
74
	xor	eax, eax
69
  .next:
75
  .next:
70
	or	edx, edx
76
	or	edx, edx
71
	jz	.end
77
	jz	.end
72
	cmp	dword[edx], 0
78
	cmp	dword[edx], 0
73
	jz	.end
79
	jz	.end
74
	stdcall	strcmp, [edx], [sz_name]
80
	stdcall	strcmp, [edx], [sz_name]
75
	test	eax, eax
81
	test	eax, eax
76
	jz	.ok
82
	jz	.ok
77
	add	edx, 8
83
	add	edx, 8
78
	jmp	.next
84
	jmp	.next
79
  .ok:
85
  .ok:
80
	mov	eax, [edx + 4]
86
	mov	eax, [edx + 4]
81
  .end:
87
  .end:
82
	ret
88
	ret
83
endp
89
endp
84
;-----------------------------------------------------------------------------
90
;-----------------------------------------------------------------------------
85
proc strcmp, str1:dword, str2:dword
91
proc strcmp, str1:dword, str2:dword
86
	push	esi edi
92
	push	esi edi
87
	mov	esi, [str1]
93
	mov	esi, [str1]
88
	mov	edi, [str2]
94
	mov	edi, [str2]
89
	xor	eax, eax
95
	xor	eax, eax
90
    @@:
96
    @@:
91
	lodsb
97
	lodsb
92
	scasb
98
	scasb
93
	jne	.fail
99
	jne	.fail
94
	or	al, al
100
	or	al, al
95
	jnz	@b
101
	jnz	@b
96
	jmp	.ok
102
	jmp	.ok
97
  .fail:
103
  .fail:
98
	or	eax, -1
104
	or	eax, -1
99
  .ok:
105
  .ok:
100
	pop	edi esi
106
	pop	edi esi
101
	ret
107
	ret
102
endp
108
endp
103
;-----------------------------------------------------------------------------
109
;-----------------------------------------------------------------------------
104
s_libdir:
110
s_libdir:
105
  db '/sys/lib/'
111
  db '/sys/lib/'
106
  .fname rb 32
112
  .fname rb 32
107
;-----------------------------------------------------------------------------
113
;-----------------------------------------------------------------------------
108
proc mem.Alloc, size
114
proc mem.Alloc, size
109
	push	ebx ecx
115
	push	ebx ecx
110
	mov	ecx, [size]
116
	mov	ecx, [size]
111
	mcall	68, 12
117
	mcall	68, 12
112
	pop	ecx ebx
118
	pop	ecx ebx
113
	ret
119
	ret
114
endp
120
endp
115
;-----------------------------------------------------------------------------
121
;-----------------------------------------------------------------------------
116
proc mem.ReAlloc, mptr, size
122
proc mem.ReAlloc, mptr, size
117
	push	ebx ecx edx
123
	push	ebx ecx edx
118
	mov	ecx, [size]
124
	mov	ecx, [size]
119
	or	ecx, ecx
125
	or	ecx, ecx
120
	jz	@f
126
	jz	@f
121
    @@:
127
    @@:
122
	mov	edx, [mptr]
128
	mov	edx, [mptr]
123
	or	edx, edx
129
	or	edx, edx
124
	jz	@f
130
	jz	@f
125
    @@:
131
    @@:
126
	mcall	68, 20
132
	mcall	68, 20
127
	or	eax, eax
133
	or	eax, eax
128
	jz	@f
134
	jz	@f
129
    @@:
135
    @@:
130
	pop	edx ecx ebx
136
	pop	edx ecx ebx
131
	ret
137
	ret
132
endp
138
endp
133
;-----------------------------------------------------------------------------
139
;-----------------------------------------------------------------------------
134
proc mem.Free, mptr
140
proc mem.Free, mptr
135
	push	ebx ecx
141
	push	ebx ecx
136
	mov	ecx,[mptr]
142
	mov	ecx,[mptr]
137
	or	ecx,ecx
143
	or	ecx,ecx
138
	jz	@f
144
	jz	@f
139
    @@:
145
    @@:
140
	mcall	68, 13
146
	mcall	68, 13
141
	pop	ecx ebx
147
	pop	ecx ebx
142
	ret
148
	ret
143
endp
149
endp
144
;-----------------------------------------------------------------------------
150
;-----------------------------------------------------------------------------