Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1487 → Rev 1488

/programs/develop/libraries/box_lib/!readme.txt
202,9 → 202,14
 
Ìàêîðîñ @use_library
 
Ýòîò ìàêðîñ ïðåäñòàâëÿåò âûçûâàåìûå ïðîöåäóðû, êîòîðûå èñïîëüçóþòñÿ äëÿ ðàáîòû ãðóïï ìàêðîñîâ À è B. Äàííûé ìàêðîñ ðàñïîëàãàåòñÿ â ñåêöèè äàòà. Èñïîëüçîâàíèå äàííîãî ìàêðîñà îáÿçàòåëüíî.
Ýòîò ìàêðîñ ïðåäñòàâëÿåò âûçûâàåìûå ïðîöåäóðû, êîòîðûå èñïîëüçóþòñÿ äëÿ ðàáîòû ãðóïï ìàêðîñîâ À è B. Äàííûé ìàêðîñ ðàñïîëàãàåòñÿ â ñåêöèè äàòà. Èñïîëüçîâàíèå äàííîãî ìàêðîñà íóæíî äëÿ çàãðóçêè áèáëèîòåê íî åãî ìîæíî çàìåíÿòü íà @use_library_mem.
 
 
Ìàêîðîñ @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
 
Ýòîò ìàêðîñ èñïîëüçóåò ìàêðîñ @use_library, íî â îòëè÷èå îò íåãî îí ïîçâîëÿåò äëÿ ôóíêöèé ñ èìåíàìè 'lib_init' çàäàâàòü 4 ïàðàìåòðà.  äàíûõ ïàðàìåòðàõ ìîãóò áûòü óêàçàòåëè íà ôóíêöèè äëÿ ðàáîòû ñ ïàìÿòüþ, êîòîðûå ìîãóò áûòü íóæíû äëÿ èñïîëüçîâàíèÿ âíóòðè áèáëèîòåêè.
 
 
Êàê ÿ ìîãó èñïîëüçîâàòü ìàêðîñ çàãðóçêè áèáëèîòåêè/áèáëèîòåê â ñâîåé ïðîãðàììå?
 
Îáùèé øàáëîí äëÿ èñïîëüçîâàíèÿ áèáëèîòåêè òàêîé:
/programs/develop/libraries/box_lib/load_lib.mac
117,7 → 117,8
local lp1
local correction
local exit_
;/equ
 
library_fun_memory_alloc equ 0 ;íå èñïîëüçîâàòü â ìàêðîñàõ ïðîâåðêó íà ôóíêöèè 'lib_init'
err_message1 equ dword [esp+8]
head1 equ dword [esp+4]
 
325,6 → 326,16
 
 
 
macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
{
@use_library
library_fun_memory_alloc equ mem_alloc
library_fun_memory_free equ mem_free
library_fun_memory_realloc equ mem_realloc
library_fun_dll_load equ dll_load
}
 
 
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__
{
local end_steep
589,6 → 600,9
}
 
 
;âõîäíûå ïàðàìåòðû:
;eax - àäðåñ áèáëèîòåêè â ïàìÿòè
;myimport - èìïîðòèðóåìûå ôóíêöèè
macro import_boxlib myimport, err_message_import__, head_f_i__
{
local import_loop
605,33 → 619,53
mov edx, eax
mov esi,myimport
import_loop:
lodsd
lodsd ;mov eax,dword[esi] ;add esi,4 ;ïîëó÷àåì â eax óêàçàòåëü íà èìÿ èìïîðòèðóåìîé ôóíêöèè
test eax, eax
jz import_done
push edx
jz import_done ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â ïîëüçîâàòåëüñêîé ïðîãðàììå)
push edx ;ñîõðàíÿåì íà÷àëî áèáëèîòå÷íûõ óêàçàòåëåé íà ôóíêöèè
import_find:
mov ebx, [ds:edx]
test ebx, ebx
jz import_not_found
push eax
jz import_not_found ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â áèáëèîòåêå)
push eax ;eax - óêàçàòåëü íà èìÿ ýêñïîðòèðóåìîé ôóíêöèè (â ïîëüçîâàòåëüñêîé ïðîãðàììå)
lp:
mov cl, [ds:eax]
cmp cl, [ds:ebx]
jnz import_find_next
cmp cl, [ds:ebx] ;ñðàâíèâàåì èìåíà ôóíêöèé â áèáëèîòåêå è â ïîëüçîâàòåëüñêîé ïðîãðàììå
jnz import_find_next ;åñëè íàçâàíèÿ íå ñîâïàëè
test cl, cl
jz import_found
jz import_found ;åñëè íàçâàíèÿ ñîâïàëè, è óæå êîíåö ñòðîêè (cl=0)
inc eax
inc ebx
jmp lp
import_find_next:
pop eax
add edx, 8
add edx, 8 ;8 = 4 áàéòà óêàçàòåëü íà íàçâàíèå è 4 áàéòà óêàçàòåëü íà ôóíêöèþ
jmp import_find
import_found:
pop eax
mov eax, [ds:edx+4]
mov [esi-4], eax
pop edx
pop ebx ;âîñòàíàâëèâàåì óêàçàòåëü íà èìÿ ôóíêöèè (êîòîðûé áûë â eax) è îñâîáîæäàåì ñòåê
mov eax, [ds:edx+4] ;eax = óêàçàòåëü íà ôóíêöèþ (â áèáëèîòåêå)
mov [esi-4], eax ;êîïèðóåì óêàçàòåëü (íà ôóíêöèþ) â ïðîãðàììó, -4 ñòàâèì ïîòîìó ÷òî esi áûëî ñäâèíóòî êîìàíäîé lodsd
pop edx ;óñòàíàâëèâàåì edx íà íà÷àëî áèáëèîòå÷íûõ ôóíêöèé
;--- ïðîâåðÿåì ñîâïàäàåò ëè èìÿ ýêñïîðòèðîâàííîé ôóíêöèè ñ 'lib_init'
if library_fun_memory_alloc eq 0
else
cmp dword[ebx],'lib_'
jne import_loop
cmp dword[ebx+4],'init'
jne import_loop
;--- åñëè èìÿ ôóíêöèè ñîâïàëî ñ 'lib_init' ïîïàäàåì ñþäà
;ïîäêëþ÷åíèå ôóíêöèé äëÿ ðàáîòû ñ ïàìÿòüþ
;push eax
;call dll.Init
pushad
mov esi,eax
mov eax,library_fun_memory_alloc
mov ebx,library_fun_memory_free
mov ecx,library_fun_memory_realloc
mov edx,library_fun_dll_load
call dword esi
popad
end if
jmp import_loop
import_not_found:
add esp,4
638,7 → 672,7
show_error_window err_message_import__, head_f_i__ ;show error message /create window
jmp e.exit
import_done:
xor eax,eax
xor eax,eax ;=0 âñå çàãðóçèëîñü óäà÷íî
e.exit:
;---------------------------------------------------------------------
}