Subversion Repositories Kolibri OS

Rev

Rev 4987 | Rev 6245 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3374 IgorA 1
;13.03.2013 - use @notify
2
;08.06.2010 - new macros @use_library_mem
3
;08.05.2009 - bugfix
1108 Lrz 4
;14.04.2009 - a macros for code load library the box_lib.obj from '/sys/lib/' or current dirrectory.
5
; The macros for load any library/libraries:
6
; Copyright (c) 2009, 
7
; All rights reserved.
8
;
9
; Redistribution and use in source and binary forms, with or without
10
; modification, are permitted provided that the following conditions are met:
11
;       * Redistributions of source code must retain the above copyright
12
;       notice, this list of conditions and the following disclaimer.
13
;       * Redistributions in binary form must reproduce the above copyright
14
;       notice, this list of conditions and the following disclaimer in the
15
;       documentation and/or other materials provided with the distribution.
16
;       * Neither the name of the  nor the
17
;       names of its contributors may be used to endorse or promote products
18
;       derived from this software without specific prior written permission.
19
;
20
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka  ''AS IS'' AND ANY
21
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
24
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
;*****************************************************************************
31
; This macros based on source code:
3374 IgorA 32
;  - Alexey Teplov / Алексей Теплов
33
; Mario79, Mario - Marat Zakiyanov / Марат Закиянов
34
; Diamondz - Evgeny Grechnikov / Евгений Гречников
1108 Lrz 35
;------------------------
36
; DESCRIPTION
37
; Macro load_library
38
; Logick of work.
39
; A first time we must to check system path, where I belive find a system library. System path is "/sys/lib/".
40
; If I cannot found my library, i must to check second way. Second way is current dirrectory.
41
; If we cannot load library, we must show the error message:
42
; "I'm sorry,the programm cannot found system library box_lib.obj."
43
; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
44
;
45
;
46
;---------------------------------------------------------------------
47
; Macro sys_load_library
48
; A first time we must to check own path in current dirrectory the program, where I belive find a system library.
49
; If I cannot found my library, i must to check second way. Second way is system path a "/sys/lib/".
50
; If we cannot load library, we must show the error message:
51
; "I'm sorry,the programm cannot found system library box_lib.obj."
52
; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
53
;
54
;---------------------------------------------------------------------
55
; How can I use it?
56
;---------------------------------------------------------------------
57
;-Example using single load library
58
;-universal load library/librarys
1127 Lrz 59
;load_library  library_name__, cur_dir_path__, library_path__, system_path__, \
60
;err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__
1108 Lrz 61
;-if return code =-1 then exit, else normally work
62
;        cmp     eax,-1
63
;        jz      exit
64
;- Well, if you get
65
;
66
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3374 IgorA 67
;DATA данные
68
;Всегда соблюдать последовательность в имени.
1127 Lrz 69
;system_path__      db '/sys/lib/'
70
;library_name__     db 'box_lib.obj',0
3374 IgorA 71
; Если есть желание разъединить, то нужно использовать следующию конструкцию
1127 Lrz 72
;system_path__      db '/sys/lib/box_lib.obj',0
3374 IgorA 73
;... любая последовательность других команд и определений.
1127 Lrz 74
;library_name__     db 'box_lib.obj',0
1108 Lrz 75
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
76
 
1127 Lrz 77
;err_message_found_lib__   db 'Sorry I cannot found library box_lib.obj',0
78
;head_f_i__:
79
;head_f_l__        db 'System error',0
80
;err_message_import__      db 'Error on load import library box_lib.obj',0
1108 Lrz 81
 
82
;myimport:
83
;
84
;edit_box_draw   dd      aEdit_box_draw
85
;edit_box_key    dd      aEdit_box_key
86
;edit_box_mouse  dd      aEdit_box_mouse
87
;version_ed      dd      aVersion_ed
88
;
89
;check_box_draw  dd      aCheck_box_draw
90
;check_box_mouse dd      aCheck_box_mouse
91
;version_ch      dd      aVersion_ch
92
;
93
;option_box_draw  dd      aOption_box_draw
94
;option_box_mouse dd      aOption_box_mouse
95
;version_op       dd      aVersion_op
96
 
97
;                dd      0
98
;                dd      0
99
;
100
;aEdit_box_draw  db 'edit_box',0
101
;aEdit_box_key   db 'edit_box_key',0
102
;aEdit_box_mouse db 'edit_box_mouse',0
103
;aVersion_ed     db 'version_ed',0
104
 
105
;aCheck_box_draw  db 'check_box_draw',0
106
;aCheck_box_mouse db 'check_box_mouse',0
107
;aVersion_ch      db 'version_ch',0
108
 
109
;aOption_box_draw  db 'option_box_draw',0
110
;aOption_box_mouse db 'option_box_mouse',0
111
;aVersion_op       db 'version_op',0
112
 
113
;---------------------------------------------------------------------
114
macro @use_library
115
{
1127 Lrz 116
local lp1
4987 IgorA 117
local lp2
118
local lp3
119
local lp4
3374 IgorA 120
local file_name
1488 IgorA 121
 
3374 IgorA 122
library_fun_memory_alloc equ 0 ;не использовать в макросах проверку на функции 'lib_init'
1108 Lrz 123
 
124
align 4
3374 IgorA 125
arrea_xx dd 0
126
file_name db '/rd/1/@notify',0
1127 Lrz 127
 
128
align 4
3374 IgorA 129
run_notify_struct:
130
	.Function dd 7
131
	.Position dd 0
132
	.Flags dd ?
133
	.Count dd 0
134
	.Buffer dd 0
135
		db 0
136
	.FileName dd file_name
1108 Lrz 137
;---------------------------------------------------------------------
138
 
1204 Lrz 139
@library_name     equ    dword [esp+16]
140
@cur_dir_path     equ    dword [esp+12]
141
@library_path     equ    dword [esp+8]
142
@point_dir_name   equ    dword [esp+4]
143
 
1108 Lrz 144
align 4
145
@copy_path:
5881 IgorA 146
	mov     esi,@cur_dir_path
147
	mov     edi,@library_path
148
	xor     eax,eax
149
	cld
1204 Lrz 150
align 4
1108 Lrz 151
.lp1:
5881 IgorA 152
	lodsb
153
	stosb
154
	test    eax,eax
155
	jnz     .lp1
156
	mov     esi,edi
157
	dec     esi ;переход на символ конца строки @cur_dir_path
158
	std
1204 Lrz 159
align 4
1108 Lrz 160
.lp2:
5881 IgorA 161
	lodsb
162
	cmp     al,'/'
163
	jnz     .lp2
164
	mov     edi,esi
165
	add     edi,2
166
	cld
167
	mov     esi,@point_dir_name
168
	test    esi,esi
1204 Lrz 169
	jz      .str_lp4
1108 Lrz 170
 
1204 Lrz 171
align 4
1108 Lrz 172
.lp3:
5881 IgorA 173
	lodsb
174
	stosb
175
	test    eax,eax
176
	jnz     .lp3
177
	dec     edi
1204 Lrz 178
.str_lp4:
179
	mov     esi,@library_name
180
align 4
181
.lp4:
5881 IgorA 182
	lodsb
183
	stosb
184
	test    eax,eax
185
	jnz     .lp4
1108 Lrz 186
;---------------------------------------------------------------------
5881 IgorA 187
	ret
1108 Lrz 188
}
189
 
190
 
191
 
1488 IgorA 192
macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
193
{
194
@use_library
195
library_fun_memory_alloc equ mem_alloc
196
library_fun_memory_free equ mem_free
197
library_fun_memory_realloc equ mem_realloc
198
library_fun_dll_load equ dll_load
199
}
200
 
201
 
1204 Lrz 202
macro sys_load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__,point_dir_name__
1108 Lrz 203
{
204
local end_steep
205
local exit
206
;---------------------------------------------------------------------
207
; loading Box_Lib library
208
 
1127 Lrz 209
        mcall   68,19,system_path__   ; load of sys directory
1108 Lrz 210
        test    eax,eax
211
        jnz     end_steep
212
 
1204 Lrz 213
if point_dir_name__ eq
214
  copy_path   library_name__, cur_dir_path__, library_path__,0x0
215
else
216
  copy_path   library_name__, cur_dir_path__, library_path__,point_dir_name__    ;the macros making way /current pach a program/+ name system library
217
end if
1108 Lrz 218
 
1127 Lrz 219
        mcall   68,19,library_path__ ; load of alternative
1108 Lrz 220
        test    eax,eax
221
        jnz     end_steep
1127 Lrz 222
        show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
1108 Lrz 223
        jmp     exit
224
 
225
 
226
align 4
227
end_steep:
228
 
1127 Lrz 229
        import_boxlib myimport, err_message_import__, head_f_i__  ;import
1108 Lrz 230
exit:
1127 Lrz 231
        test    eax,eax
232
        jz      @f
233
 
3374 IgorA 234
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 235
        or      eax,-1
236
@@:
237
 
1108 Lrz 238
;---------------------------------------------------------------------
239
}
240
 
241
 
1204 Lrz 242
macro load_library library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__,point_dir_name__
1108 Lrz 243
{
244
local end_steep
245
local exit
246
;---------------------------------------------------------------------
247
; loading Box_Lib library
248
 
1204 Lrz 249
if point_dir_name__ eq
250
  copy_path   library_name__, cur_dir_path__, library_path__,0x0
251
else
252
  copy_path   library_name__, cur_dir_path__, library_path__,point_dir_name__    ;the macros making way /current pach a program/+ name system library
253
end if
1108 Lrz 254
 
1127 Lrz 255
        mcall   68,19,library_path__ ; load of alternative
1108 Lrz 256
        test    eax,eax
257
        jnz     end_steep
258
 
1127 Lrz 259
        mcall   68,19,system_path__ ; load of sys directory
1108 Lrz 260
        test    eax,eax
261
        jnz     end_steep
262
 
1127 Lrz 263
        show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
1108 Lrz 264
        jmp     exit
265
 
266
align 4
267
end_steep:
268
 
1127 Lrz 269
        import_boxlib myimport, err_message_import__, head_f_i__  ;import
1108 Lrz 270
exit:
1127 Lrz 271
        test    eax,eax
272
        jz      @f
273
 
3374 IgorA 274
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 275
        or      eax,-1
276
@@:
277
 
1108 Lrz 278
;---------------------------------------------------------------------
279
}
280
macro sys_load_libraries _start,_end
281
{
1127 Lrz 282
local exit_lp2
283
local lp2
1108 Lrz 284
local lp
285
local end_steep
286
local next
287
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1127 Lrz 288
library_name__            equ [ebp]
289
cur_dir_path__            equ [ebp+4]
290
library_path__            equ [ebp+8]
291
system_path__             equ [ebp+12]
292
err_message_found_lib__   equ [ebp+16]
293
head_f_l__                equ [ebp+20]
1204 Lrz 294
my_import                 equ [ebp+24]
1127 Lrz 295
err_message_import__      equ [ebp+28]
296
head_f_i__                equ [ebp+32]
1204 Lrz 297
point_dir_name__          equ [ebp+36]
298
adr_load_lib              equ dword [ebp+40]
299
status_lib                equ dword [ebp+44]
1108 Lrz 300
 
301
        mov     ebp,_start
302
        mov     ecx,((_end-_start)/ll_struc_size)
303
 
304
align 4
305
lp:     push    ecx
1127 Lrz 306
        mcall   68,19,system_path__   ; load of sys directory
1108 Lrz 307
        test    eax,eax
308
        jnz     end_steep
309
 
1204 Lrz 310
        copy_path  library_name__, cur_dir_path__, library_path__,point_dir_name__     ;the macros making way /current pach a program/+ name system library
1108 Lrz 311
 
1127 Lrz 312
        mcall   68,19,library_path__ ; load of alternative
1108 Lrz 313
        test    eax,eax
314
        jnz     end_steep
315
 
316
        or      status_lib,0x1          ; status of code - enable error - not found library
317
 
1204 Lrz 318
        show_error_window  err_message_found_lib__, head_f_l__,    ;show error message /create window
1108 Lrz 319
        jmp      next
320
 
321
align 4
322
end_steep:
323
        mov     adr_load_lib,eax        ;save adr lib in memory
1127 Lrz 324
        import_boxlib my_import, err_message_import__, head_f_i__  ;import
1108 Lrz 325
 
326
        test    eax,eax
327
        jz      next
328
 
329
        or      status_lib,0x2          ; status of code - enable error - import error
330
 
331
next:
332
        pop     ecx
333
        add     ebp,ll_struc_size
334
        dec     ecx
335
        jnz     lp
1127 Lrz 336
 
337
;----------------------------------
338
        mov     ebp,_start
339
        mov     ecx,((_end-_start)/ll_struc_size)
340
 
341
align 4
342
lp2:
343
        mov     eax,status_lib
344
        test    eax,eax
345
        jz      @f
346
 
3374 IgorA 347
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 348
        or      eax,-1
349
        jmp     exit_lp2
350
 
351
@@:
352
        add     ebp,ll_struc_size
353
        dec     ecx
354
        jnz     lp2
355
exit_lp2:
1108 Lrz 356
}
357
 
358
macro load_libraries _start,_end
359
{
1127 Lrz 360
local lp2
361
local exit_lp2
1108 Lrz 362
local lp
363
local end_steep
364
local next
365
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1127 Lrz 366
library_name__            equ [ebp]
367
cur_dir_path__            equ [ebp+4]
368
library_path__            equ [ebp+8]
369
system_path__             equ [ebp+12]
370
err_message_found_lib__   equ [ebp+16]
371
head_f_l__                equ [ebp+20]
1204 Lrz 372
my_import                 equ [ebp+24]
1127 Lrz 373
err_message_import__      equ [ebp+28]
374
head_f_i__                equ [ebp+32]
1204 Lrz 375
point_dir_name__          equ [ebp+36]
376
adr_load_lib              equ dword [ebp+40]
377
status_lib                equ dword [ebp+44]
1108 Lrz 378
 
379
        mov     ebp,_start
380
        mov     ecx,((_end-_start)/ll_struc_size)
381
 
382
align 4
383
lp:     push    ecx
384
 
1204 Lrz 385
        copy_path    library_name__, cur_dir_path__, library_path__,point_dir_name__   ;the macros making way /current pach a program/+ name system library
1108 Lrz 386
 
1127 Lrz 387
        mcall   68,19,library_path__  ; load of alternative
1108 Lrz 388
        test    eax,eax
389
        jnz     end_steep
390
 
1127 Lrz 391
        mcall   68,19,system_path__   ; load of sys directory
1108 Lrz 392
        test    eax,eax
393
        jnz     end_steep
394
 
395
        or      status_lib,0x1          ; status of code - enable error - not found library
396
 
1127 Lrz 397
        show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
1108 Lrz 398
        jmp      next
399
 
400
align 4
401
end_steep:
402
        mov     adr_load_lib,eax        ;save adr lib in memory
403
 
1127 Lrz 404
        import_boxlib my_import, err_message_import__, head_f_i__  ;import
1108 Lrz 405
 
406
        test    eax,eax
407
        jz      next
408
 
409
        or      status_lib,0x2          ; status of code - enable error - import error
410
 
411
next:
412
        pop     ecx
413
        add     ebp,ll_struc_size
414
        dec     ecx
415
        jnz     lp
1127 Lrz 416
 
417
;-----------------------------------------------
418
        mov     ebp,_start
419
        mov     ecx,((_end-_start)/ll_struc_size)
420
 
421
align 4
422
lp2:
423
        mov     eax,status_lib
424
        test    eax,eax
425
        jz      @f
426
 
3374 IgorA 427
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 428
        or      eax,-1
429
        jmp     exit_lp2
430
 
431
@@:
432
        add     ebp,ll_struc_size
433
        dec     ecx
434
        jnz     lp2
435
exit_lp2:
436
 
1108 Lrz 437
}
438
 
439
 
1204 Lrz 440
macro copy_path lib_name,dir_path,lib_path,point_dir_name
1108 Lrz 441
{
442
        pushad  ;save all registers
443
        push    dword lib_name
444
        push    dword dir_path
445
        push    dword lib_path
1204 Lrz 446
        push	dword point_dir_name
1108 Lrz 447
        call    @copy_path
448
 
1204 Lrz 449
        add     esp,16
1108 Lrz 450
        popad   ;restore all registers
451
}
452
 
3374 IgorA 453
; готовим текст для показа через @notify:
454
; 1) выделяем память в [arrea_xx]
455
; 2) копируем err_message и head в [arrea_xx]
1108 Lrz 456
macro show_error_window  err_message, head
3374 IgorA 457
{
458
local lp0
459
local lp1
1108 Lrz 460
 
3374 IgorA 461
pushad
462
	mcall 68,11
463
	mcall 68,12,4096
464
	push eax
465
	pop dword [arrea_xx]
1108 Lrz 466
 
3374 IgorA 467
	mov edi,eax
468
	mov esi,dword head
469
	cld
470
align 4
471
lp0:
472
	movsb
473
	cmp byte[esi],0
474
	jne lp0
475
	mov word[edi],'. '
476
	add edi,2
477
	mov esi,dword err_message
478
align 4
479
lp1:
480
	movsb
481
	cmp byte[esi],0
482
	jne lp1
483
	mov byte[edi],0
484
popad
485
	or eax,-1  ;увы
1108 Lrz 486
}
487
 
3374 IgorA 488
; включаем показ сообщения через @notify:
489
macro notify_window_run message
490
{
491
push eax ebx
492
	mov eax,message ;параметры для командной строки
493
	mov [run_notify_struct.Flags], eax
494
	mov eax,70 ;run @notify
495
	mov ebx,run_notify_struct
496
	int 0x40
497
pop ebx eax
498
}
1108 Lrz 499
 
3374 IgorA 500
 
501
;входные параметры:
502
;eax - адрес библиотеки в памяти
503
;myimport - импортируемые функции
1127 Lrz 504
macro import_boxlib myimport, err_message_import__, head_f_i__
1108 Lrz 505
{
506
local import_loop
507
local import_find
508
local lp
509
local import_find_next
510
local import_found
511
local import_done
512
local exit
513
local e.exit
514
local import_not_found
515
; initialize import
516
 
517
        mov     edx, eax
518
        mov     esi,myimport
519
import_loop:
3374 IgorA 520
        lodsd	;mov eax,dword[esi] ;add esi,4 ;получаем в eax указатель на имя импортируемой функции
1108 Lrz 521
        test    eax, eax
3374 IgorA 522
        jz      import_done ;если указатель на имя функции = 0 (в пользовательской программе)
523
        push    edx ;сохраняем начало библиотечных указателей на функции
1108 Lrz 524
import_find:
525
        mov     ebx, [ds:edx]
526
        test    ebx, ebx
3374 IgorA 527
        jz      import_not_found ;если указатель на имя функции = 0 (в библиотеке)
528
        push    eax ;eax - указатель на имя экспортируемой функции (в пользовательской программе)
1108 Lrz 529
lp:
530
        mov     cl, [ds:eax]
3374 IgorA 531
        cmp     cl, [ds:ebx] ;сравниваем имена функций в библиотеке и в пользовательской программе
532
        jnz     import_find_next ;если названия не совпали
1108 Lrz 533
        test    cl, cl
3374 IgorA 534
        jz      import_found ;если названия совпали, и уже конец строки (cl=0)
1108 Lrz 535
        inc     eax
536
        inc     ebx
537
        jmp     lp
538
import_find_next:
539
        pop     eax
3374 IgorA 540
        add     edx, 8 ;8 = 4 байта указатель на название и 4 байта указатель на функцию
1108 Lrz 541
        jmp     import_find
542
import_found:
3374 IgorA 543
        pop     ebx ;востанавливаем указатель на имя функции (который был в eax) и освобождаем стек
544
        mov     eax, [ds:edx+4] ;eax = указатель на функцию (в библиотеке)
545
        mov     [esi-4], eax ;копируем указатель (на функцию) в программу, -4 ставим потому что esi было сдвинуто командой lodsd
546
        pop     edx ;устанавливаем edx на начало библиотечных функций
547
;--- проверяем совпадает ли имя экспортированной функции с 'lib_init'
1488 IgorA 548
if library_fun_memory_alloc eq 0
549
else
550
		cmp dword[ebx],'lib_'
551
		jne		import_loop
552
		cmp dword[ebx+4],'init'
553
		jne		import_loop
3374 IgorA 554
;--- если имя функции совпало с 'lib_init' попадаем сюда
555
		;подключение функций для работы с памятью
1488 IgorA 556
		;push eax
557
		;call dll.Init
558
		pushad
559
		mov esi,eax
560
		mov	eax,library_fun_memory_alloc
561
		mov	ebx,library_fun_memory_free
562
		mov	ecx,library_fun_memory_realloc
563
		mov	edx,library_fun_dll_load
564
		call dword esi
565
		popad
566
end if
1108 Lrz 567
        jmp     import_loop
568
import_not_found:
569
        add     esp,4
1127 Lrz 570
        show_error_window  err_message_import__, head_f_i__    ;show error message /create window
1108 Lrz 571
        jmp     e.exit
572
import_done:
3374 IgorA 573
        xor     eax,eax ;=0 все загрузилось удачно
1108 Lrz 574
e.exit:
575
;---------------------------------------------------------------------
576
}
1204 Lrz 577
ll_struc_size = 48;($-library_name__)    ; constant   size of struct
578
struc l_libs library_name__, cur_dir_path__, library_path__, system_path__, err_message_found_lib__, head_f_l__, my_import, err_message_import__, head_f_i__,point_dir_name; struct for loading libraries
1108 Lrz 579
{
3374 IgorA 580
.library_name__           dd library_name__        ; имя загружаемой библиотеки
581
.cur_dir_path__           dd cur_dir_path__        ; указатель на буфер в котором содержиться путь от куда была запущена программа
1127 Lrz 582
 
3374 IgorA 583
.library_path__           dd library_path__        ; указатель на буфер в котором будет софоримирован путь к библиотеки, если нужно вычислить путь до либы с места запуска программы, обычно нужно, в случаях, если либа расположена в той же папке
584
.complete_path            dd system_path__         ; путь который четко содержит путь
1127 Lrz 585
 
586
.err_message_found_lib__  dd err_message_found_lib__
587
.head_f_l__               dd head_f_l__
1204 Lrz 588
.my_import                dd my_import
1127 Lrz 589
.err_message_import__     dd err_message_import__
590
.head_f_i__               dd head_f_i__
1204 Lrz 591
if point_dir_name eq
592
.point_dir_name__	dd 0x0
593
else
3374 IgorA 594
.point_dir_name__	dd point_dir_name	   ; имя вложенной дирректории в кторой храняться подгружаемые модули.
1204 Lrz 595
end if
1127 Lrz 596
.adr_load_lib           dd 0x0
597
.status_lib             dd 0x0          ;status of load library
1108 Lrz 598
;
599
}