Rev 5690 | Rev 7219 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5690 | Rev 5883 | ||
---|---|---|---|
Line 14... | Line 14... | ||
14 | #define _TEXT_ERROR_ADD "'Error while loading library" |
14 | #define _TEXT_ERROR_ADD "'Error while loading library" |
15 | #endif |
15 | #endif |
Line 16... | Line 16... | ||
16 | 16 | ||
Line -... | Line 17... | ||
- | 17 | char a_libdir[43] = "/sys/lib/\0"; |
|
- | 18 | ||
- | 19 | dword GLOBAL_FUNC_LIB = 0; |
|
- | 20 | dword G_FUNC_LOAD = 0; |
|
- | 21 | dword G_FUNC_GET = 0; |
|
17 | char a_libdir[43] = "/sys/lib/\0"; |
22 | dword PATH_LIBRARY_LOADING = "/rd/1/lib/library.obj"; |
18 | 23 | ||
19 | :inline void error_init(dword text) |
24 | :inline void error_init(dword text) |
20 | { |
25 | { |
21 | dword TEXT_ERROR = malloc(1024); |
26 | dword TEXT_ERROR = malloc(1024); |
22 | sprintf(TEXT_ERROR, "%s `%s`' -E",_TEXT_ERROR_ADD,text); |
27 | sprintf(TEXT_ERROR, "%s `%s`' -E",_TEXT_ERROR_ADD,text); |
23 | notify(TEXT_ERROR); |
28 | notify(TEXT_ERROR); |
Line 24... | Line 29... | ||
24 | free(TEXT_ERROR); |
29 | free(TEXT_ERROR); |
25 | } |
30 | } |
26 | 31 | ||
27 | // stdcall with 1 parameter |
32 | // stdcall with 1 parameter |
28 | void dll_Load() { |
33 | :void dll_Load() { |
29 | asm { |
34 | asm { |
30 | push ebp |
35 | push ebp |
Line 81... | Line 86... | ||
81 | ret 4 |
86 | ret 4 |
82 | } |
87 | } |
83 | } |
88 | } |
Line 84... | Line 89... | ||
84 | 89 | ||
85 | //stdcall with 2 parameters |
90 | //stdcall with 2 parameters |
86 | void dll_Link() { |
91 | :void dll_Link() { |
87 | asm { |
92 | asm { |
88 | push ebp |
93 | push ebp |
89 | mov ebp, esp |
94 | mov ebp, esp |
90 | push eax |
95 | push eax |
Line 111... | Line 116... | ||
111 | } |
116 | } |
112 | } |
117 | } |
Line 113... | Line 118... | ||
113 | 118 | ||
114 | 119 | ||
115 | //stdcall with 1 parameter |
120 | //stdcall with 1 parameter |
116 | void dll_Init() { |
121 | :void dll_Init() { |
117 | asm { |
122 | asm { |
118 | push ebp |
123 | push ebp |
119 | mov ebp, esp |
124 | mov ebp, esp |
Line 129... | Line 134... | ||
129 | } |
134 | } |
130 | } |
135 | } |
Line 131... | Line 136... | ||
131 | 136 | ||
132 | 137 | ||
133 | // stdcall with 2 parameters |
138 | // stdcall with 2 parameters |
134 | void dll_GetProcAddress(){ |
139 | :void dll_GetProcAddress(){ |
135 | asm { |
140 | asm { |
136 | push ebp |
141 | push ebp |
137 | mov ebp, esp |
142 | mov ebp, esp |
Line 159... | Line 164... | ||
159 | } |
164 | } |
160 | } |
165 | } |
Line 161... | Line 166... | ||
161 | 166 | ||
162 | 167 | ||
163 | // stdcall with 2 parameters |
168 | // stdcall with 2 parameters |
164 | void dll_StrCmp() { |
169 | :void dll_StrCmp() { |
165 | asm { |
170 | asm { |
166 | push ebp |
171 | push ebp |
167 | mov ebp, esp |
172 | mov ebp, esp |
Line 185... | Line 190... | ||
185 | leave |
190 | leave |
186 | ret 8 |
191 | ret 8 |
187 | } |
192 | } |
188 | } |
193 | } |
Line 189... | Line 194... | ||
189 | 194 | ||
190 | int load_dll2(dword dllname, import_table, byte need_init) |
195 | :int load_dll2(dword dllname, import_table, byte need_init) |
191 | { |
196 | { |
192 | //dword dllentry=0; |
197 | //dword dllentry=0; |
193 | // load DLL |
198 | // load DLL |
194 | $mov eax, 68 |
199 | $mov eax, 68 |
Line 237... | Line 242... | ||
237 | return 0; |
242 | return 0; |
238 | @exit01: |
243 | @exit01: |
239 | return -1; |
244 | return -1; |
240 | } |
245 | } |
Line 241... | Line 246... | ||
241 | 246 | ||
242 | byte load_dll(dword dllname, import_table, byte need_init) |
247 | :byte load_dll(dword dllname, import_table, byte need_init) |
243 | { |
248 | { |
244 | if (load_dll2(dllname, import_table, need_init)) |
249 | if (load_dll2(dllname, import_table, need_init)) |
245 | { |
250 | { |
246 | error_init(dllname); |
251 | error_init(dllname); |
247 | return false; |
252 | return false; |
248 | } |
253 | } |
249 | return true; |
254 | return true; |
Line -... | Line 255... | ||
- | 255 | } |
|
- | 256 | ||
- | 257 | :struct OBJECT |
|
- | 258 | { |
|
- | 259 | void load(dword dllname); |
|
- | 260 | dword get(dword fname); |
|
- | 261 | } library; |
|
- | 262 | ||
- | 263 | :void OBJECT::load(dword dllname) |
|
- | 264 | { |
|
- | 265 | dword tmp; |
|
- | 266 | IF(!GLOBAL_FUNC_LIB) |
|
- | 267 | { |
|
- | 268 | $mov eax, 68 |
|
- | 269 | $mov ebx, 19 |
|
- | 270 | ECX=#PATH_LIBRARY_LOADING; |
|
- | 271 | $int 0x40 |
|
- | 272 | tmp = EAX; |
|
- | 273 | GLOBAL_FUNC_LIB = tmp; |
|
- | 274 | tmp+=4; |
|
- | 275 | G_FUNC_LOAD = DSDWORD[tmp]; |
|
- | 276 | tmp+=8; |
|
- | 277 | G_FUNC_GET = DSDWORD[tmp]; |
|
- | 278 | } |
|
- | 279 | G_FUNC_LOAD stdcall(dllname); |
|
- | 280 | } |
|
- | 281 | ||
- | 282 | :dword OBJECT::get(dword fname) |
|
- | 283 | { |
|
- | 284 | dword tmp=fname; |
|
- | 285 | G_FUNC_GET stdcall(tmp); |
|
- | 286 | return EAX; |
|
- | 287 | } |
|
- | 288 | ||
- | 289 | /* |
|
- | 290 | #define INIT_(name) byte init_#name(){object.load(name); |
|
- | 291 | #define IMPORT(name) name = object.get(name); |
|
Line 250... | Line 292... | ||
250 | } |
292 | #define _INIT return 1;} |
251 | 293 | */ |