Subversion Repositories Kolibri OS

Rev

Rev 1488 | Rev 4987 | 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
 
1108 Lrz 117
local lp
1127 Lrz 118
local lp1
3374 IgorA 119
local file_name
1488 IgorA 120
 
3374 IgorA 121
library_fun_memory_alloc equ 0 ;не использовать в макросах проверку на функции 'lib_init'
1108 Lrz 122
 
123
align 4
3374 IgorA 124
arrea_xx dd 0
125
file_name db '/rd/1/@notify',0
1127 Lrz 126
 
127
align 4
3374 IgorA 128
run_notify_struct:
129
	.Function dd 7
130
	.Position dd 0
131
	.Flags dd ?
132
	.Count dd 0
133
	.Buffer dd 0
134
		db 0
135
	.FileName dd file_name
1108 Lrz 136
;---------------------------------------------------------------------
137
 
1204 Lrz 138
@library_name     equ    dword [esp+16]
139
@cur_dir_path     equ    dword [esp+12]
140
@library_path     equ    dword [esp+8]
141
@point_dir_name   equ    dword [esp+4]
142
 
1108 Lrz 143
align 4
144
@copy_path:
1204 Lrz 145
;        mov     ebx,@library_name
1108 Lrz 146
        mov     esi,@cur_dir_path
147
        mov     edi,@library_path
148
 
149
        xor     eax,eax
150
        cld
1204 Lrz 151
align 4
1108 Lrz 152
.lp1:
153
        lodsb
154
        stosb
155
        test    eax,eax
156
        jnz     .lp1
157
        mov     esi,edi
158
 
159
        std
1204 Lrz 160
align 4
1108 Lrz 161
.lp2:
162
        lodsb
163
        cmp     al,'/'
164
        jnz     .lp2
165
        mov     edi,esi
1204 Lrz 166
 
1108 Lrz 167
        add     edi,2
1204 Lrz 168
        cld
169
;	mov     esi,@library_name
1108 Lrz 170
 
1204 Lrz 171
	mov	esi,@point_dir_name
172
	test	esi,esi
173
	jz      .str_lp4
1108 Lrz 174
 
1204 Lrz 175
align 4
1108 Lrz 176
.lp3:
177
        lodsb
178
        stosb
179
        test    eax,eax
180
        jnz     .lp3
1204 Lrz 181
 
182
 
183
	dec 	edi
184
.str_lp4:
185
	mov     esi,@library_name
186
align 4
187
.lp4:
188
        lodsb
189
        stosb
190
        test    eax,eax
191
        jnz     .lp4
1108 Lrz 192
;---------------------------------------------------------------------
1127 Lrz 193
        ret
1108 Lrz 194
}
195
 
196
 
197
 
1488 IgorA 198
macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
199
{
200
@use_library
201
library_fun_memory_alloc equ mem_alloc
202
library_fun_memory_free equ mem_free
203
library_fun_memory_realloc equ mem_realloc
204
library_fun_dll_load equ dll_load
205
}
206
 
207
 
1204 Lrz 208
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 209
{
210
local end_steep
211
local exit
212
;---------------------------------------------------------------------
213
; loading Box_Lib library
214
 
1127 Lrz 215
        mcall   68,19,system_path__   ; load of sys directory
1108 Lrz 216
        test    eax,eax
217
        jnz     end_steep
218
 
1204 Lrz 219
if point_dir_name__ eq
220
  copy_path   library_name__, cur_dir_path__, library_path__,0x0
221
else
222
  copy_path   library_name__, cur_dir_path__, library_path__,point_dir_name__    ;the macros making way /current pach a program/+ name system library
223
end if
1108 Lrz 224
 
1127 Lrz 225
        mcall   68,19,library_path__ ; load of alternative
1108 Lrz 226
        test    eax,eax
227
        jnz     end_steep
1127 Lrz 228
        show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
1108 Lrz 229
        jmp     exit
230
 
231
 
232
align 4
233
end_steep:
234
 
1127 Lrz 235
        import_boxlib myimport, err_message_import__, head_f_i__  ;import
1108 Lrz 236
exit:
1127 Lrz 237
        test    eax,eax
238
        jz      @f
239
 
3374 IgorA 240
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 241
        or      eax,-1
242
@@:
243
 
1108 Lrz 244
;---------------------------------------------------------------------
245
}
246
 
247
 
1204 Lrz 248
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 249
{
250
local end_steep
251
local exit
252
;---------------------------------------------------------------------
253
; loading Box_Lib library
254
 
1204 Lrz 255
if point_dir_name__ eq
256
  copy_path   library_name__, cur_dir_path__, library_path__,0x0
257
else
258
  copy_path   library_name__, cur_dir_path__, library_path__,point_dir_name__    ;the macros making way /current pach a program/+ name system library
259
end if
1108 Lrz 260
 
1127 Lrz 261
        mcall   68,19,library_path__ ; load of alternative
1108 Lrz 262
        test    eax,eax
263
        jnz     end_steep
264
 
1127 Lrz 265
        mcall   68,19,system_path__ ; load of sys directory
1108 Lrz 266
        test    eax,eax
267
        jnz     end_steep
268
 
1127 Lrz 269
        show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
1108 Lrz 270
        jmp     exit
271
 
272
align 4
273
end_steep:
274
 
1127 Lrz 275
        import_boxlib myimport, err_message_import__, head_f_i__  ;import
1108 Lrz 276
exit:
1127 Lrz 277
        test    eax,eax
278
        jz      @f
279
 
3374 IgorA 280
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 281
        or      eax,-1
282
@@:
283
 
1108 Lrz 284
;---------------------------------------------------------------------
285
}
286
macro sys_load_libraries _start,_end
287
{
1127 Lrz 288
local exit_lp2
289
local lp2
1108 Lrz 290
local lp
291
local end_steep
292
local next
293
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1127 Lrz 294
library_name__            equ [ebp]
295
cur_dir_path__            equ [ebp+4]
296
library_path__            equ [ebp+8]
297
system_path__             equ [ebp+12]
298
err_message_found_lib__   equ [ebp+16]
299
head_f_l__                equ [ebp+20]
1204 Lrz 300
my_import                 equ [ebp+24]
1127 Lrz 301
err_message_import__      equ [ebp+28]
302
head_f_i__                equ [ebp+32]
1204 Lrz 303
point_dir_name__          equ [ebp+36]
304
adr_load_lib              equ dword [ebp+40]
305
status_lib                equ dword [ebp+44]
1108 Lrz 306
 
307
        mov     ebp,_start
308
        mov     ecx,((_end-_start)/ll_struc_size)
309
 
310
align 4
311
lp:     push    ecx
1127 Lrz 312
        mcall   68,19,system_path__   ; load of sys directory
1108 Lrz 313
        test    eax,eax
314
        jnz     end_steep
315
 
1204 Lrz 316
        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 317
 
1127 Lrz 318
        mcall   68,19,library_path__ ; load of alternative
1108 Lrz 319
        test    eax,eax
320
        jnz     end_steep
321
 
322
        or      status_lib,0x1          ; status of code - enable error - not found library
323
 
1204 Lrz 324
        show_error_window  err_message_found_lib__, head_f_l__,    ;show error message /create window
1108 Lrz 325
        jmp      next
326
 
327
align 4
328
end_steep:
329
        mov     adr_load_lib,eax        ;save adr lib in memory
1127 Lrz 330
        import_boxlib my_import, err_message_import__, head_f_i__  ;import
1108 Lrz 331
 
332
        test    eax,eax
333
        jz      next
334
 
335
        or      status_lib,0x2          ; status of code - enable error - import error
336
 
337
next:
338
        pop     ecx
339
        add     ebp,ll_struc_size
340
        dec     ecx
341
        jnz     lp
1127 Lrz 342
 
343
;----------------------------------
344
        mov     ebp,_start
345
        mov     ecx,((_end-_start)/ll_struc_size)
346
 
347
align 4
348
lp2:
349
        mov     eax,status_lib
350
        test    eax,eax
351
        jz      @f
352
 
3374 IgorA 353
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 354
        or      eax,-1
355
        jmp     exit_lp2
356
 
357
@@:
358
        add     ebp,ll_struc_size
359
        dec     ecx
360
        jnz     lp2
361
exit_lp2:
1108 Lrz 362
}
363
 
364
macro load_libraries _start,_end
365
{
1127 Lrz 366
local lp2
367
local exit_lp2
1108 Lrz 368
local lp
369
local end_steep
370
local next
371
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1127 Lrz 372
library_name__            equ [ebp]
373
cur_dir_path__            equ [ebp+4]
374
library_path__            equ [ebp+8]
375
system_path__             equ [ebp+12]
376
err_message_found_lib__   equ [ebp+16]
377
head_f_l__                equ [ebp+20]
1204 Lrz 378
my_import                 equ [ebp+24]
1127 Lrz 379
err_message_import__      equ [ebp+28]
380
head_f_i__                equ [ebp+32]
1204 Lrz 381
point_dir_name__          equ [ebp+36]
382
adr_load_lib              equ dword [ebp+40]
383
status_lib                equ dword [ebp+44]
1108 Lrz 384
 
385
        mov     ebp,_start
386
        mov     ecx,((_end-_start)/ll_struc_size)
387
 
388
align 4
389
lp:     push    ecx
390
 
1204 Lrz 391
        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 392
 
1127 Lrz 393
        mcall   68,19,library_path__  ; load of alternative
1108 Lrz 394
        test    eax,eax
395
        jnz     end_steep
396
 
1127 Lrz 397
        mcall   68,19,system_path__   ; load of sys directory
1108 Lrz 398
        test    eax,eax
399
        jnz     end_steep
400
 
401
        or      status_lib,0x1          ; status of code - enable error - not found library
402
 
1127 Lrz 403
        show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
1108 Lrz 404
        jmp      next
405
 
406
align 4
407
end_steep:
408
        mov     adr_load_lib,eax        ;save adr lib in memory
409
 
1127 Lrz 410
        import_boxlib my_import, err_message_import__, head_f_i__  ;import
1108 Lrz 411
 
412
        test    eax,eax
413
        jz      next
414
 
415
        or      status_lib,0x2          ; status of code - enable error - import error
416
 
417
next:
418
        pop     ecx
419
        add     ebp,ll_struc_size
420
        dec     ecx
421
        jnz     lp
1127 Lrz 422
 
423
;-----------------------------------------------
424
        mov     ebp,_start
425
        mov     ecx,((_end-_start)/ll_struc_size)
426
 
427
align 4
428
lp2:
429
        mov     eax,status_lib
430
        test    eax,eax
431
        jz      @f
432
 
3374 IgorA 433
        notify_window_run [arrea_xx] ; создаем окно @notify
1127 Lrz 434
        or      eax,-1
435
        jmp     exit_lp2
436
 
437
@@:
438
        add     ebp,ll_struc_size
439
        dec     ecx
440
        jnz     lp2
441
exit_lp2:
442
 
1108 Lrz 443
}
444
 
445
 
1204 Lrz 446
macro copy_path lib_name,dir_path,lib_path,point_dir_name
1108 Lrz 447
{
448
        pushad  ;save all registers
449
        push    dword lib_name
450
        push    dword dir_path
451
        push    dword lib_path
1204 Lrz 452
        push	dword point_dir_name
1108 Lrz 453
        call    @copy_path
454
 
1204 Lrz 455
        add     esp,16
1108 Lrz 456
        popad   ;restore all registers
457
}
458
 
3374 IgorA 459
; готовим текст для показа через @notify:
460
; 1) выделяем память в [arrea_xx]
461
; 2) копируем err_message и head в [arrea_xx]
1108 Lrz 462
macro show_error_window  err_message, head
3374 IgorA 463
{
464
local lp0
465
local lp1
1108 Lrz 466
 
3374 IgorA 467
pushad
468
	mcall 68,11
469
	mcall 68,12,4096
470
	push eax
471
	pop dword [arrea_xx]
1108 Lrz 472
 
3374 IgorA 473
	mov edi,eax
474
	mov esi,dword head
475
	cld
476
align 4
477
lp0:
478
	movsb
479
	cmp byte[esi],0
480
	jne lp0
481
	mov word[edi],'. '
482
	add edi,2
483
	mov esi,dword err_message
484
align 4
485
lp1:
486
	movsb
487
	cmp byte[esi],0
488
	jne lp1
489
	mov byte[edi],0
490
popad
491
	or eax,-1  ;увы
1108 Lrz 492
}
493
 
3374 IgorA 494
; включаем показ сообщения через @notify:
495
macro notify_window_run message
496
{
497
push eax ebx
498
	mov eax,message ;параметры для командной строки
499
	mov [run_notify_struct.Flags], eax
500
	mov eax,70 ;run @notify
501
	mov ebx,run_notify_struct
502
	int 0x40
503
pop ebx eax
504
}
1108 Lrz 505
 
3374 IgorA 506
 
507
;входные параметры:
508
;eax - адрес библиотеки в памяти
509
;myimport - импортируемые функции
1127 Lrz 510
macro import_boxlib myimport, err_message_import__, head_f_i__
1108 Lrz 511
{
512
local import_loop
513
local import_find
514
local lp
515
local import_find_next
516
local import_found
517
local import_done
518
local exit
519
local e.exit
520
local import_not_found
521
; initialize import
522
 
523
        mov     edx, eax
524
        mov     esi,myimport
525
import_loop:
3374 IgorA 526
        lodsd	;mov eax,dword[esi] ;add esi,4 ;получаем в eax указатель на имя импортируемой функции
1108 Lrz 527
        test    eax, eax
3374 IgorA 528
        jz      import_done ;если указатель на имя функции = 0 (в пользовательской программе)
529
        push    edx ;сохраняем начало библиотечных указателей на функции
1108 Lrz 530
import_find:
531
        mov     ebx, [ds:edx]
532
        test    ebx, ebx
3374 IgorA 533
        jz      import_not_found ;если указатель на имя функции = 0 (в библиотеке)
534
        push    eax ;eax - указатель на имя экспортируемой функции (в пользовательской программе)
1108 Lrz 535
lp:
536
        mov     cl, [ds:eax]
3374 IgorA 537
        cmp     cl, [ds:ebx] ;сравниваем имена функций в библиотеке и в пользовательской программе
538
        jnz     import_find_next ;если названия не совпали
1108 Lrz 539
        test    cl, cl
3374 IgorA 540
        jz      import_found ;если названия совпали, и уже конец строки (cl=0)
1108 Lrz 541
        inc     eax
542
        inc     ebx
543
        jmp     lp
544
import_find_next:
545
        pop     eax
3374 IgorA 546
        add     edx, 8 ;8 = 4 байта указатель на название и 4 байта указатель на функцию
1108 Lrz 547
        jmp     import_find
548
import_found:
3374 IgorA 549
        pop     ebx ;востанавливаем указатель на имя функции (который был в eax) и освобождаем стек
550
        mov     eax, [ds:edx+4] ;eax = указатель на функцию (в библиотеке)
551
        mov     [esi-4], eax ;копируем указатель (на функцию) в программу, -4 ставим потому что esi было сдвинуто командой lodsd
552
        pop     edx ;устанавливаем edx на начало библиотечных функций
553
;--- проверяем совпадает ли имя экспортированной функции с 'lib_init'
1488 IgorA 554
if library_fun_memory_alloc eq 0
555
else
556
		cmp dword[ebx],'lib_'
557
		jne		import_loop
558
		cmp dword[ebx+4],'init'
559
		jne		import_loop
3374 IgorA 560
;--- если имя функции совпало с 'lib_init' попадаем сюда
561
		;подключение функций для работы с памятью
1488 IgorA 562
		;push eax
563
		;call dll.Init
564
		pushad
565
		mov esi,eax
566
		mov	eax,library_fun_memory_alloc
567
		mov	ebx,library_fun_memory_free
568
		mov	ecx,library_fun_memory_realloc
569
		mov	edx,library_fun_dll_load
570
		call dword esi
571
		popad
572
end if
1108 Lrz 573
        jmp     import_loop
574
import_not_found:
575
        add     esp,4
1127 Lrz 576
        show_error_window  err_message_import__, head_f_i__    ;show error message /create window
1108 Lrz 577
        jmp     e.exit
578
import_done:
3374 IgorA 579
        xor     eax,eax ;=0 все загрузилось удачно
1108 Lrz 580
e.exit:
581
;---------------------------------------------------------------------
582
}
1204 Lrz 583
ll_struc_size = 48;($-library_name__)    ; constant   size of struct
584
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 585
{
3374 IgorA 586
.library_name__           dd library_name__        ; имя загружаемой библиотеки
587
.cur_dir_path__           dd cur_dir_path__        ; указатель на буфер в котором содержиться путь от куда была запущена программа
1127 Lrz 588
 
3374 IgorA 589
.library_path__           dd library_path__        ; указатель на буфер в котором будет софоримирован путь к библиотеки, если нужно вычислить путь до либы с места запуска программы, обычно нужно, в случаях, если либа расположена в той же папке
590
.complete_path            dd system_path__         ; путь который четко содержит путь
1127 Lrz 591
 
592
.err_message_found_lib__  dd err_message_found_lib__
593
.head_f_l__               dd head_f_l__
1204 Lrz 594
.my_import                dd my_import
1127 Lrz 595
.err_message_import__     dd err_message_import__
596
.head_f_i__               dd head_f_i__
1204 Lrz 597
if point_dir_name eq
598
.point_dir_name__	dd 0x0
599
else
3374 IgorA 600
.point_dir_name__	dd point_dir_name	   ; имя вложенной дирректории в кторой храняться подгружаемые модули.
1204 Lrz 601
end if
1127 Lrz 602
.adr_load_lib           dd 0x0
603
.status_lib             dd 0x0          ;status of load library
1108 Lrz 604
;
605
}