1.Add procedure check exception 12 (overflow stack) 2.Add info in reference of...
[kolibrios.git] / programs / load_lib.mac
blob0e0e2cd335353e05cfb3f0a471e17615c181331d
1 ; The macros for load any library/libraries:\r
2 ; Copyright (c) 2009, <Lrz>\r
3 ; All rights reserved.\r
4 \r
5 \r
6 \r
7 macro @use_library mem_alloc,mem_free,mem_realloc,dll_load\r
8 {\r
9 local lp1\r
10 local lp2\r
11 local lp3\r
12 local lp4\r
13 local lp5\r
14 local lp6\r
15 local file_name\r
16 local l_lib_m1\r
17 local l_lib_m2\r
18 local l_lib_m3\r
19 local l_lib_m4\r
21 library_fun_memory_alloc equ mem_alloc\r
22 library_fun_memory_free equ mem_free\r
23 library_fun_memory_realloc equ mem_realloc\r
24 library_fun_dll_load equ dll_load\r
26 align 4\r
27 arrea_xx dd 0\r
28 file_name db '/sys/@notify',0\r
30 if lang eq ru\r
31         l_lib_m1 db '"‘¨á⥬­ ï ®è¨¡ª ',13,10,'�¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,0\r
32         l_lib_m2 db '"‘¨á⥬­ ï ®è¨¡ª ',13,10,'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,0\r
33         l_lib_m3 db 39,13,10,'­¥ ­ ©¤¥­  äã­ªæ¨ï ',39,0\r
34         l_lib_m4 db 39,'" -tE',0\r
35 else if lang eq it\r
36         l_lib_m1 db '"Errore di sistema',13,10,'Non trovato ',39,0\r
37         l_lib_m2 db '"Errore di sistema',13,10,'Import errato ',39,0\r
38         l_lib_m3 db 39,13,10,'funzione non trovata ',39,0\r
39         l_lib_m4 db 39,'" -tE',0\r
40 else\r
41         l_lib_m1 db '"System error',13,10,'Sorry I cannot found library ',39,0\r
42         l_lib_m2 db '"System error',13,10,'Error on load import library ',39,0\r
43         l_lib_m3 db 39,13,10,'cannot found function ',39,0\r
44         l_lib_m4 db 39,'" -tE',0\r
45 end if\r
47 align 4\r
48 run_notify_struct:\r
49         .Function dd 7\r
50         .Position dd 0\r
51         .Flags dd ?\r
52         .Count dd 0\r
53         .Buffer dd 0\r
54                 db 0\r
55         .FileName dd file_name\r
57 ;description:\r
58 ; £®â®¢¨¬ â¥ªáâ ¤«ï ¯®ª §  ç¥à¥§ @notify:\r
59 ; 1) ¢ë¤¥«ï¥¬ ¯ ¬ïâì ¢ [arrea_xx] ­® ­¥ ¡®«ì襠®¤­®£® à § \r
60 ; 2) ª®¯¨à㥬 § £®«®¢®ª (¥á«¨ ¥áâì ¨¬ï ä㭪樨 â® ¤®¡ ¢«ï¥¬ ¥£® ª § £®«®¢ªã) ¨ â¥ªáâ á®®¡é¥­¨ï ¢ [arrea_xx]\r
61 ;input:\r
62 ; ebp+8  - library name\r
63 ; ebp+12 - 0 ¨«¨ ¨¬ï ä㭪樨, ª®â®àãî ­¥ ã¤ «®áì íªá¯®àâ¨à®¢ âì\r
64 ;output:\r
65 ; eax = -1\r
66 align 4\r
67 l_lib_init_error_window:\r
68         push ebp\r
69         mov ebp,esp\r
70         cmp dword[arrea_xx],0\r
71         jne .no_msg ;¥á«¨ à ­ì襠¡ë«® á®§¤ ­® ¤à㣮¥ á®®¡é¥­¨¥\r
72         pushad\r
74         mcall SF_SYS_MISC,SSF_HEAP_INIT\r
75         mcall SF_SYS_MISC,SSF_MEM_ALLOC,4096\r
76         mov [arrea_xx],eax\r
78         mov edi,eax\r
79         mov esi,l_lib_m2 ;á®®¡é¥­¨¥ ¥á«¨ ­¥ ã¤ «®áì ¨¬¯®àâ¨à®¢ âì äã­ªæ¨î\r
80         cmp dword[ebp+12],0\r
81         je @f\r
82         mov esi,l_lib_m1 ;á®®¡é¥­¨¥ ¥á«¨ ­¥ ã¤ «®áì § £à㧨âì ¡¨¡«¨®â¥ªã\r
83 align 4\r
84 @@:\r
85         movsb\r
86         cmp byte[esi],0\r
87         jne @b\r
88         ;¤®¡ ¢«ï¥¬ ¨¬ï ¡¨¡«¨®â¥ª¨\r
89         mov esi,[ebp+8]\r
90 align 4\r
91 @@:\r
92         movsb\r
93         cmp byte[esi],0\r
94         jne @b\r
96         cmp dword[ebp+12],0\r
97         je .lp1\r
98         ;¤®¡ ¢«ï¥¬ á¥à¥¤¨­ã á®®¡é¥­¨ï\r
99         mov esi,l_lib_m3\r
100 align 4\r
101 @@:\r
102         movsb\r
103         cmp byte[esi],0\r
104         jne @b\r
105         ;¤®¡ ¢«ï¥¬ ¨¬ï ä㭪樨\r
106         mov esi,[ebp+12]\r
107 align 4\r
108 @@:\r
109         movsb\r
110         cmp byte[esi],0\r
111         jne @b\r
112         \r
113         .lp1: ;á®®¡é¥­¨¥ ¥á«¨ ­¥ ã¤ «®áì § £à㧨âì ¡¨¡«¨®â¥ªã\r
114         ;¤®¡ ¢«ï¥¬ ª®­¥æ á®®¡é¥­¨ï\r
115         mov esi,l_lib_m4\r
116 align 4\r
117 @@:\r
118         movsb\r
119         cmp byte[esi],0\r
120         jne @b\r
121         mov byte[edi],0\r
123         popad\r
124         .no_msg:\r
125         or eax,-1\r
126         pop ebp\r
127         ret 8\r
129 @library_name     equ    dword [esp+16]\r
130 @cur_dir_path     equ    dword [esp+12]\r
131 @library_path     equ    dword [esp+8]\r
132 @point_dir_name   equ    dword [esp+4]\r
134 align 4\r
135 @copy_path:\r
136         mov     esi,@cur_dir_path\r
137         mov     edi,@library_path\r
138         xor     eax,eax\r
139         cld\r
140 align 4\r
141 .lp1:\r
142         lodsb\r
143         stosb\r
144         test    eax,eax\r
145         jnz     .lp1\r
146         mov     esi,edi\r
147         dec     esi ;¯¥à¥å®¤ ­  á¨¬¢®« ª®­æ  áâப¨ @cur_dir_path\r
148         std\r
149 align 4\r
150 .lp2:\r
151         lodsb\r
152         cmp     al,'/'\r
153         jnz     .lp2\r
154         mov     edi,esi\r
155         add     edi,2\r
156         cld\r
157         mov     esi,@point_dir_name\r
158         test    esi,esi\r
159         jz      .str_lp4\r
161         ;¯à®¢¥àª  ®â­®á¨â¥«ì­ëå ¯ã⥩ c ¤¢ã¬ï â®çª ¬¨ '../'\r
162         cmp word[esi],'..'\r
163         jne .lp3\r
164         dec edi ;¤«ï ¯¥à¥å®¤  ­  '/'\r
165 .lp6:\r
166                 add esi,3 ;¯à®¯ã᪠¥¬ ®¤­® ¯®¤­ï⨥ '../'\r
167 .lp5:\r
168                 dec edi ;¨¤¥¬ ¯® ¯ ¯ª ¬\r
169                 cmp byte[edi],'/'\r
170                 jnz .lp5\r
171         cmp word[esi],'..'\r
172         je .lp6\r
173         inc edi ;¤«ï ¯¥à¥å®¤  ­  '/'\r
175         ;ª®¯¨à®¢ ­¨¥ ®â­®á¨â¥«ì­®£® ¯ãâ¨\r
176 align 4\r
177 .lp3:\r
178         lodsb\r
179         stosb\r
180         test    eax,eax\r
181         jnz     .lp3\r
182         dec     edi\r
183 .str_lp4:\r
184         mov     esi,@library_name\r
185 align 4\r
186 .lp4:\r
187         lodsb\r
188         stosb\r
189         test    eax,eax\r
190         jnz     .lp4\r
191         ret\r
193 ;---------------------------------------------------------------------\r
195 macro sys_load_library library_name__, library_path__, system_path__, myimport, point_dir_name__\r
197 local i_begin\r
198 local i_error\r
199 local i_exit\r
200         push ebx\r
201         mcall   SF_SYS_MISC,SSF_LOAD_DLL,system_path__   ; load of sys directory\r
202         test    eax,eax\r
203         jnz             i_begin\r
205 if point_dir_name__ eq\r
206                 copy_path   library_name__, [32], library_path__,0\r
207 else\r
208                 ;the macros making way /current path a program/ + name system library\r
209                 copy_path   library_name__, [32], library_path__,point_dir_name__\r
210 end if\r
211                 mcall   SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative\r
212                 test    eax,eax\r
213                 jnz             i_begin\r
214                 jmp             i_error\r
215 align 4\r
216         i_begin:\r
217                 import_boxlib myimport\r
218                 test    eax,eax\r
219                 jz              i_exit\r
220         i_error:\r
221                 push    eax\r
222                 push    dword library_name__\r
223                 call    l_lib_init_error_window\r
224                 notify_window_run [arrea_xx] ; á®§¤ ¥¬ ®ª­® @notify\r
225         i_exit:\r
226         pop ebx\r
228 ;---------------------------------------------------------------------\r
230 ;output:\r
231 ; eax - ¥á«¨ ã¤ ç­® â® 0\r
232 macro load_library library_name__, library_path__, system_path__, myimport, point_dir_name__\r
234 local i_begin\r
235 local i_error\r
236 local i_exit\r
237         push ebx\r
238 if point_dir_name__ eq\r
239                 copy_path   library_name__, [32], library_path__,0\r
240 else\r
241                 ;the macros making way /current path a program/ + name system library\r
242                 copy_path   library_name__, [32], library_path__,point_dir_name__\r
243 end if\r
244                 mcall   SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative\r
245                 test    eax,eax\r
246                 jnz             i_begin\r
248                 mcall   SF_SYS_MISC,SSF_LOAD_DLL,system_path__ ; load of sys directory\r
249                 test    eax,eax\r
250                 jnz             i_begin\r
251                 jmp             i_error\r
252 align 4\r
253         i_begin:\r
254                 import_boxlib myimport\r
255                 test    eax,eax\r
256                 jz              i_exit\r
257         i_error:\r
258                 push    eax\r
259                 push    dword library_name__\r
260                 call    l_lib_init_error_window\r
261                 notify_window_run [arrea_xx] ; á®§¤ ¥¬ ®ª­® @notify\r
262         i_exit:\r
263         pop ebx\r
264 ;---------------------------------------------------------------------\r
267 ;description:\r
268 ; ¬ ªà®á § £à㧪¨ ¡¨¡«¨®â¥ª ¨§ á¨á⥬­®© ¯ ¯ª¨, ¥á«¨ ¡¨¡«¨®â¥ª  ­¥ ­ ©¤¥­ \r
269 ; â®£¤  ¯®¨áª ¨¤¥â ¢ â¥ªã饩 ¯ ¯ª¥ á ¯à®£à ¬¬®©\r
270 macro sys_load_libraries _start,_end\r
272 local cycle0\r
273 local end_steep\r
274 local cycle0n\r
275 local cycle1\r
276 local cycle1n\r
277 local cycle1e\r
278 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
279 library_name__            equ [ebp]\r
280 library_path__            equ [ebp+4]\r
281 system_path__             equ [ebp+8]\r
282 my_import                 equ [ebp+12]\r
283 point_dir_name__          equ [ebp+16]\r
284 adr_load_lib              equ dword [ebp+20]\r
285 status_lib                equ dword [ebp+24]\r
287         mov     ebp,_start\r
288         mov     ecx,(_end-_start)/ll_struc_size\r
289 align 4\r
290         cycle0:\r
291                 push    ecx\r
292         mcall   SF_SYS_MISC,SSF_LOAD_DLL,system_path__   ; load of sys directory\r
293         test    eax,eax\r
294         jnz     end_steep \r
296         ;the macros making way /current path a program/ + name system library\r
297                 copy_path  library_name__, [32], library_path__,point_dir_name__\r
298         \r
299         mcall   SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative\r
300         test    eax,eax\r
301         jnz     end_steep\r
302         or      status_lib,1          ; status of code - enable error - not found library\r
304                 push    eax\r
305                 push    dword library_name__\r
306                 call    l_lib_init_error_window\r
307         jmp             cycle0n\r
309 align 4\r
310         end_steep:\r
311                 mov             adr_load_lib,eax        ;save adr lib in memory\r
312                 import_boxlib my_import\r
313                 test    eax,eax\r
314                 jz              cycle0n\r
315                 or              status_lib,2          ; status of code - enable error - import error\r
316                 push    eax\r
317                 push    dword library_name__\r
318                 call    l_lib_init_error_window\r
319         cycle0n:\r
320                 pop     ecx\r
321                 add     ebp,ll_struc_size\r
322                 dec     ecx\r
323                 jnz     cycle0\r
325         ;¢ë¢®¤ á®®¡é¥­¨ï ®¡ ®è¨¡ª¥ ¯à¨ § £à㧪¥\r
326         mov     ebp,_start\r
327         mov     ecx,(_end-_start)/ll_struc_size\r
328 align 4\r
329         cycle1:\r
330                 mov     eax,status_lib\r
331                 test    eax,eax\r
332                 jz      cycle1n\r
333                 notify_window_run [arrea_xx] ; á®§¤ ¥¬ ®ª­® @notify\r
334                 mov             eax,-1\r
335                 jmp             cycle1e\r
336 align 4\r
337                 cycle1n:\r
338                 add     ebp,ll_struc_size\r
339                 dec     ecx\r
340                 jnz     cycle1\r
341         cycle1e:\r
344 ;description:\r
345 ; ¬ ªà®á § £à㧪¨ ¡¨¡«¨®â¥ª ¨§ â¥ªã饩 ¯ ¯ª¨ á ¯à®£à ¬¬®©, ¥á«¨ ¡¨¡«¨®â¥ª  ­¥ ­ ©¤¥­ \r
346 ; â®£¤  ¯®¨áª ¨¤¥â ¢ á¨á⥬­®© ¯ ¯ª¥\r
347 macro load_libraries _start,_end\r
349 local cycle0\r
350 local end_steep\r
351 local cycle0n\r
352 local cycle1\r
353 local cycle1n\r
354 local cycle1e\r
355 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
356 library_name__            equ [ebp]\r
357 library_path__            equ [ebp+4]\r
358 system_path__             equ [ebp+8]\r
359 my_import                 equ [ebp+12]\r
360 point_dir_name__          equ [ebp+16]\r
361 adr_load_lib              equ dword [ebp+20]\r
362 status_lib                equ dword [ebp+24]\r
364         mov     ebp,_start\r
365         mov     ecx,(_end-_start)/ll_struc_size\r
366 align 4\r
367         cycle0:\r
368                 push    ecx\r
370                 ;the macros making way /current path a program/ + name system library\r
371                 copy_path    library_name__, [32], library_path__,point_dir_name__\r
373                 mcall   SF_SYS_MISC,SSF_LOAD_DLL,library_path__  ; load of alternative\r
374                 test    eax,eax\r
375                 jnz             end_steep\r
377                 mcall   SF_SYS_MISC,SSF_LOAD_DLL,system_path__   ; load of sys directory\r
378                 test    eax,eax\r
379                 jnz             end_steep\r
380                 or              status_lib,1          ; status of code - enable error - not found library\r
382                 push    eax\r
383                 push    dword library_name__\r
384                 call    l_lib_init_error_window\r
385                 jmp             cycle0n\r
387 align 4\r
388         end_steep:\r
389                 mov             adr_load_lib,eax        ;save adr lib in memory\r
390                 import_boxlib my_import\r
391                 test    eax,eax\r
392                 jz              cycle0n\r
393                 or              status_lib,2          ; status of code - enable error - import error\r
394                 push    eax\r
395                 push    dword library_name__\r
396                 call    l_lib_init_error_window\r
397         cycle0n:\r
398                 pop     ecx\r
399                 add     ebp,ll_struc_size\r
400                 dec     ecx\r
401                 jnz     cycle0\r
403         ;¢ë¢®¤ á®®¡é¥­¨ï ®¡ ®è¨¡ª¥ ¯à¨ § £à㧪¥\r
404         mov     ebp,_start\r
405         mov     ecx,(_end-_start)/ll_struc_size\r
406 align 4\r
407         cycle1:\r
408                 mov     eax,status_lib\r
409                 test    eax,eax\r
410                 jz      cycle1n\r
411                 notify_window_run [arrea_xx] ; á®§¤ ¥¬ ®ª­® @notify\r
412                 mov             eax,-1\r
413                 jmp             cycle1e\r
414 align 4\r
415                 cycle1n:\r
416                 add     ebp,ll_struc_size\r
417                 dec     ecx\r
418                 jnz     cycle1\r
419         cycle1e:\r
423 macro copy_path lib_name,dir_path,lib_path,point_dir_name\r
425 pushad  ;save all registers\r
426         push dword lib_name\r
427         push dword dir_path\r
428         push dword lib_path\r
429         push dword point_dir_name\r
430         call @copy_path\r
432         add  esp,16\r
433         ;notify_window_run lib_path ;unblok for test load path\r
434 popad   ;restore all registers\r
437 ; ¢ª«îç ¥¬ ¯®ª § á®®¡é¥­¨ï ç¥à¥§ @notify:\r
438 macro notify_window_run message\r
440 push eax ebx\r
441         mov eax,message ;¯ à ¬¥âàë ¤«ï ª®¬ ­¤­®© áâப¨\r
442         mov [run_notify_struct.Flags],eax\r
443         mcall SF_FILE,run_notify_struct\r
444 pop ebx eax\r
448 ;input:\r
449 ; eax -  ¤à¥á ¡¨¡«¨®â¥ª¨ ¢ ¯ ¬ïâ¨\r
450 ; myimport - ¨¬¯®àâ¨à㥬률ä㭪樨\r
451 ;output:\r
452 ; eax - ¥á«¨ ã¤ ç­® â® 0 ¨«¨ ãª § â¥«ì ­  ¨¬ï ä㭪樨 ª®â®àãî ­¥ ã¤ «®áì § £à㧨âì\r
453 ; ebx - à §àãè ¥âáï\r
454 macro import_boxlib myimport\r
456 local import_loop\r
457 local import_find\r
458 local lp\r
459 local import_find_next\r
460 local import_found\r
461 local import_done\r
462 local exit\r
463 local import_not_found\r
464 ; initialize import\r
465         push esi\r
466         mov     edx, eax\r
467         mov     esi, myimport\r
468                 cld\r
469 import_loop:\r
470         lodsd   ;mov eax,dword[esi] ;add esi,4 ;¯®«ãç ¥¬ ¢ eax ãª § â¥«ì ­  ¨¬ï ¨¬¯®àâ¨à㥬®© ä㭪樨\r
471         test    eax, eax\r
472         jz      import_done ;¥á«¨ ãª § â¥«ì ­  ¨¬ï ä㭪樨 = 0 (¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥)\r
473         push    edx ;á®å࠭塞 ­ ç «® ¡¨¡«¨®â¥ç­ëå ãª § â¥«¥© ­  ä㭪樨\r
474 import_find:\r
475         mov     ebx, [edx]\r
476         test    ebx, ebx\r
477         jz      import_not_found ;¥á«¨ ãª § â¥«ì ­  ¨¬ï ä㭪樨 = 0 (¢ ¡¨¡«¨®â¥ª¥)\r
478         push    eax ;eax - ãª § â¥«ì ­  ¨¬ï íªá¯®àâ¨à㥬®© ä㭪樨 (¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥)\r
479 align 4\r
480 lp:\r
481         mov     cl, [eax]\r
482         cmp     cl, [ebx] ;áà ¢­¨¢ ¥¬ ¨¬¥­  ä㭪権 ¢ ¡¨¡«¨®â¥ª¥ ¨ ¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥\r
483         jnz     import_find_next ;¥á«¨ ­ §¢ ­¨ï ­¥ á®¢¯ «¨\r
484         test    cl, cl\r
485         jz      import_found ;¥á«¨ ­ §¢ ­¨ï á®¢¯ «¨, ¨ ã¦¥ ª®­¥æ áâப¨ (cl=0)\r
486         inc     eax\r
487         inc     ebx\r
488         jmp     lp\r
489 import_find_next:\r
490         pop     eax\r
491         add     edx, 8 ;8 = 4 ¡ ©â  ãª § â¥«ì ­  ­ §¢ ­¨¥ ¨ 4 ¡ ©â  ãª § â¥«ì ­  äã­ªæ¨î\r
492         jmp     import_find\r
493 import_found:\r
494         pop     ebx ;¢®áâ ­ ¢«¨¢ ¥¬ ãª § â¥«ì ­  ¨¬ï ä㭪樨 (ª®â®àë© ¡ë« ¢ eax) ¨ ®á¢®¡®¦¤ ¥¬ á⥪\r
495         mov     eax, [edx+4] ;eax = ãª § â¥«ì ­  äã­ªæ¨î (¢ ¡¨¡«¨®â¥ª¥)\r
496         mov     [esi-4], eax ;ª®¯¨à㥬 ãª § â¥«ì (­  äã­ªæ¨î) ¢ ¯à®£à ¬¬ã, -4 áâ ¢¨¬ ¯®â®¬ã çâ® esi ¡ë«® á¤¢¨­ãâ® ª®¬ ­¤®© lodsd\r
497         pop     edx ;ãáâ ­ ¢«¨¢ ¥¬ edx ­  ­ ç «® ¡¨¡«¨®â¥ç­ëå ä㭪権\r
498 ;--- ¯à®¢¥à塞 á®¢¯ ¤ ¥â «¨ ¨¬ï íªá¯®àâ¨à®¢ ­­®© ä㭪樨 á 'lib_init'\r
499 if library_fun_memory_alloc eq\r
500 else\r
501                 cmp dword[ebx],'lib_'\r
502                 jne             import_loop\r
503                 cmp dword[ebx+4],'init'\r
504                 jne             import_loop\r
505                 ;cmp  byte[ebx+8],0\r
506                 ;jne            import_loop\r
507 ;--- ¥á«¨ ¨¬ï ä㭪樨 á®¢¯ «® á 'lib_init' ¯®¯ ¤ ¥¬ á\r
508                 ;¯®¤ª«î祭¨¥ ä㭪権 ¤«ï à ¡®âë á ¯ ¬ïâìî\r
509                 ;push eax\r
510                 ;call dll.Init\r
511                 pushad\r
512                 mov esi,eax\r
513                 mov     eax,library_fun_memory_alloc\r
514                 mov     ebx,library_fun_memory_free\r
515                 mov     ecx,library_fun_memory_realloc\r
516                 mov     edx,library_fun_dll_load\r
517                 call dword esi\r
518                 popad\r
519 end if\r
520         jmp     import_loop\r
521 import_not_found:\r
522         add     esp,4\r
523         jmp     exit\r
524 import_done:\r
525         xor     eax,eax ;=0 ¢á¥ § £à㧨«®áì ã¤ ç­®\r
526 exit:\r
527         pop esi\r
529 ;---------------------------------------------------------------------\r
531 ll_struc_size = 28;($-library_name__)    ; constant   size of struct\r
532 struc l_libs library_name__, library_path__, system_path__, my_import, point_dir_name; struct for loading libraries\r
533 {        \r
534 .library_name__           dd library_name__        ; ¨¬ï § £à㦠¥¬®© ¡¨¡«¨®â¥ª¨\r
535                         \r
536 .library_path__           dd library_path__        ; ãª § â¥«ì ­  ¡ãä¥à ¢ ª®â®à®¬ ¡ã¤¥â á®ä®à¨¬¨à®¢ ­ ¯ãâì ª ¡¨¡«¨®â¥ª¨, ¥á«¨ ­ã¦­® ¢ëç¨á«¨âì ¯ãâì ¤® «¨¡ë á ¬¥áâ  § ¯ã᪠ ¯à®£à ¬¬ë, ®¡ëç­® ­ã¦­®, ¢ á«ãç ïå, ¥á«¨ «¨¡  à á¯®«®¦¥­  ¢ â®© ¦¥ ¯ ¯ª¥\r
537 .complete_path            dd system_path__         ; ¯ãâì ª®â®àë© ç¥âª® á®¤¥à¦¨â ¯ãâì\r
538 .my_import                dd my_import\r
539 if point_dir_name eq\r
540 .point_dir_name__       dd 0\r
541 else\r
542 .point_dir_name__       dd point_dir_name          ; ¨¬ï ¢«®¦¥­­®© ¤¨à४â®à¨¨ ¢ ªâ®à®© åà ­ïâìáï ¯®¤£à㦠¥¬ë¥ ¬®¤ã«¨.\r
543 end if \r
544 .adr_load_lib           dd 0\r
545 .status_lib             dd 0          ;status of load library\r