Subversion Repositories Kolibri OS

Rev

Rev 1204 | Rev 3374 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1204 Rev 1488
Line 115... Line 115...
115
local __sc
115
local __sc
116
local lp
116
local lp
117
local lp1
117
local lp1
118
local correction
118
local correction
119
local exit_
119
local exit_
120
;/equ
120
 
-
 
121
library_fun_memory_alloc equ 0 ;íå èñïîëüçîâàòü â ìàêðîñàõ ïðîâåðêó íà ôóíêöèè 'lib_init'
121
err_message1     equ    dword [esp+8]
122
err_message1     equ    dword [esp+8]
122
head1            equ    dword [esp+4]
123
head1            equ    dword [esp+4]
Line 123... Line 124...
123
 
124
 
Line 323... Line 324...
323
        ret
324
        ret
324
}
325
}
Line -... Line 326...
-
 
326
 
-
 
327
 
-
 
328
 
-
 
329
macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
-
 
330
{
-
 
331
@use_library
-
 
332
library_fun_memory_alloc equ mem_alloc
-
 
333
library_fun_memory_free equ mem_free
-
 
334
library_fun_memory_realloc equ mem_realloc
-
 
335
library_fun_dll_load equ dll_load
325
 
336
}
326
 
337
 
327
 
338
 
328
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__
339
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__
329
{
340
{
Line 587... Line 598...
587
        popad   ;restore all registers
598
        popad   ;restore all registers
588
        or      eax,-1  ;óâû
599
        or      eax,-1  ;óâû
589
}
600
}
Line -... Line 601...
-
 
601
 
-
 
602
 
-
 
603
;âõîäíûå ïàðàìåòðû:
590
 
604
;eax - àäðåñ áèáëèîòåêè â ïàìÿòè
591
 
605
;myimport - èìïîðòèðóåìûå ôóíêöèè
592
macro import_boxlib myimport, err_message_import__, head_f_i__
606
macro import_boxlib myimport, err_message_import__, head_f_i__
593
{
607
{
594
local import_loop
608
local import_loop
Line 603... Line 617...
603
; initialize import
617
; initialize import
Line 604... Line 618...
604
        
618
        
605
        mov     edx, eax
619
        mov     edx, eax
606
        mov     esi,myimport
620
        mov     esi,myimport
607
import_loop:
-
 
-
 
621
import_loop:
608
        lodsd
622
        lodsd	;mov eax,dword[esi] ;add esi,4 ;ïîëó÷àåì â eax óêàçàòåëü íà èìÿ èìïîðòèðóåìîé ôóíêöèè
609
        test    eax, eax
623
        test    eax, eax
610
        jz      import_done
624
        jz      import_done ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â ïîëüçîâàòåëüñêîé ïðîãðàììå)
611
        push    edx
625
        push    edx ;ñîõðàíÿåì íà÷àëî áèáëèîòå÷íûõ óêàçàòåëåé íà ôóíêöèè
612
import_find:
626
import_find:
613
        mov     ebx, [ds:edx]
627
        mov     ebx, [ds:edx]
614
        test    ebx, ebx
628
        test    ebx, ebx
615
        jz      import_not_found
629
        jz      import_not_found ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â áèáëèîòåêå)
616
        push    eax
630
        push    eax ;eax - óêàçàòåëü íà èìÿ ýêñïîðòèðóåìîé ôóíêöèè (â ïîëüçîâàòåëüñêîé ïðîãðàììå)
617
lp:
631
lp:
618
        mov     cl, [ds:eax]
632
        mov     cl, [ds:eax]
619
        cmp     cl, [ds:ebx]
633
        cmp     cl, [ds:ebx] ;ñðàâíèâàåì èìåíà ôóíêöèé â áèáëèîòåêå è â ïîëüçîâàòåëüñêîé ïðîãðàììå
620
        jnz     import_find_next
634
        jnz     import_find_next ;åñëè íàçâàíèÿ íå ñîâïàëè
621
        test    cl, cl
635
        test    cl, cl
622
        jz      import_found
636
        jz      import_found ;åñëè íàçâàíèÿ ñîâïàëè, è óæå êîíåö ñòðîêè (cl=0)
623
        inc     eax
637
        inc     eax
624
        inc     ebx
638
        inc     ebx
625
        jmp     lp
639
        jmp     lp
626
import_find_next:
640
import_find_next:
627
        pop     eax
641
        pop     eax
628
        add     edx, 8
642
        add     edx, 8 ;8 = 4 áàéòà óêàçàòåëü íà íàçâàíèå è 4 áàéòà óêàçàòåëü íà ôóíêöèþ
629
        jmp     import_find
643
        jmp     import_find
-
 
644
import_found:
-
 
645
        pop     ebx ;âîñòàíàâëèâàåì óêàçàòåëü íà èìÿ ôóíêöèè (êîòîðûé áûë â eax) è îñâîáîæäàåì ñòåê
-
 
646
        mov     eax, [ds:edx+4] ;eax = óêàçàòåëü íà ôóíêöèþ (â áèáëèîòåêå)
-
 
647
        mov     [esi-4], eax ;êîïèðóåì óêàçàòåëü (íà ôóíêöèþ) â ïðîãðàììó, -4 ñòàâèì ïîòîìó ÷òî esi áûëî ñäâèíóòî êîìàíäîé lodsd
-
 
648
        pop     edx ;óñòàíàâëèâàåì edx íà íà÷àëî áèáëèîòå÷íûõ ôóíêöèé
-
 
649
;--- ïðîâåðÿåì ñîâïàäàåò ëè èìÿ ýêñïîðòèðîâàííîé ôóíêöèè ñ 'lib_init'
-
 
650
if library_fun_memory_alloc eq 0
-
 
651
else
630
import_found:
652
		cmp dword[ebx],'lib_'
631
        pop     eax
653
		jne		import_loop
-
 
654
		cmp dword[ebx+4],'init'
-
 
655
		jne		import_loop
-
 
656
;--- åñëè èìÿ ôóíêöèè ñîâïàëî ñ 'lib_init' ïîïàäàåì ñþäà
-
 
657
		;ïîäêëþ÷åíèå ôóíêöèé äëÿ ðàáîòû ñ ïàìÿòüþ
-
 
658
		;push eax
-
 
659
		;call dll.Init
632
        mov     eax, [ds:edx+4]
660
		pushad
-
 
661
		mov esi,eax
-
 
662
		mov	eax,library_fun_memory_alloc
-
 
663
		mov	ebx,library_fun_memory_free
-
 
664
		mov	ecx,library_fun_memory_realloc
633
        mov     [esi-4], eax
665
		mov	edx,library_fun_dll_load
-
 
666
		call dword esi
-
 
667
		popad
634
        pop     edx
668
end if
635
        jmp     import_loop
669
        jmp     import_loop
636
import_not_found:
670
import_not_found:
637
        add     esp,4
671
        add     esp,4
638
        show_error_window  err_message_import__, head_f_i__    ;show error message /create window
672
        show_error_window  err_message_import__, head_f_i__    ;show error message /create window
639
        jmp     e.exit
673
        jmp     e.exit
640
import_done:
674
import_done:
641
        xor     eax,eax
675
        xor     eax,eax ;=0 âñå çàãðóçèëîñü óäà÷íî
642
e.exit: 
676
e.exit: 
643
;---------------------------------------------------------------------
677
;---------------------------------------------------------------------
644
}
678
}
645
ll_struc_size = 48;($-library_name__)    ; constant   size of struct
679
ll_struc_size = 48;($-library_name__)    ; constant   size of struct