Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8082 → Rev 8083

/programs/develop/libraries/box_lib/load_lib.mac
85,32 → 85,14
;edit_box_key dd aEdit_box_key
;edit_box_mouse dd aEdit_box_mouse
;version_ed dd aVersion_ed
;
;check_box_draw dd aCheck_box_draw
;check_box_mouse dd aCheck_box_mouse
;version_ch dd aVersion_ch
;
;option_box_draw dd aOption_box_draw
;option_box_mouse dd aOption_box_mouse
;version_op dd aVersion_op
 
; dd 0
; dd 0
;
; dd 0,0
;aEdit_box_draw db 'edit_box',0
;aEdit_box_key db 'edit_box_key',0
;aEdit_box_mouse db 'edit_box_mouse',0
;aVersion_ed db 'version_ed',0
 
;aCheck_box_draw db 'check_box_draw',0
;aCheck_box_mouse db 'check_box_mouse',0
;aVersion_ch db 'version_ch',0
 
;aOption_box_draw db 'option_box_draw',0
;aOption_box_mouse db 'option_box_mouse',0
;aVersion_op db 'version_op',0
 
;---------------------------------------------------------------------
macro @use_library
{
local lp1
136,7 → 118,6
.Buffer dd 0
db 0
.FileName dd file_name
;---------------------------------------------------------------------
 
@library_name equ dword [esp+16]
@cur_dir_path equ dword [esp+12]
143,7 → 124,65
@library_path equ dword [esp+8]
@point_dir_name equ dword [esp+4]
 
;description:
; £®â®¢¨¬ ⥪áâ ¤«ï ¯®ª §  ç¥à¥§ @notify:
; 1) ¢ë¤¥«ï¥¬ ¯ ¬ïâì ¢ [arrea_xx] ­® ­¥ ¡®«ìè¥ ®¤­®£® à § 
; 2) ª®¯¨à㥬 § £®«®¢®ª (¥á«¨ ¥áâì ¨¬ï ä㭪樨 â® ¤®¡ ¢«ï¥¬ ¥£® ª § £®«®¢ªã) ¨ ⥪áâ á®®¡é¥­¨ï ¢ [arrea_xx]
;input:
; ebp+8 - head message
; ebp+12 - error message
; ebp+16 - 0 ¨«¨ ¨¬ï ä㭪樨, ª®â®àãî ­¥ 㤠«®áì íªá¯®àâ¨à®¢ âì
;output:
; eax = -1
align 4
l_lib_init_error_window:
push ebp
mov ebp,esp
cmp dword[arrea_xx],0
jne .no_msg ;¥á«¨ à ­ìè¥ ¡ë«® ᮧ¤ ­® ¤à㣮¥ á®®¡é¥­¨¥
pushad
 
mcall 68,11
mcall 68,12,4096
mov [arrea_xx],eax
 
mov edi,eax
mov esi,[ebp+8]
align 4
@@:
movsb
cmp byte[esi],0
jne @b
mov word[edi],0xa0d
add edi,2
;¤®¡ ¢«ï¥¬ ¨¬ï ä㭪樨 ¢ § £®«®¢®ª
mov esi,[ebp+16]
or esi,esi
jz .lp1
mov word[edi-2],0x2020
@@:
movsb
cmp byte[esi],0
jne @b
mov word[edi],0xa0d
add edi,2
.lp1:
 
mov esi,[ebp+12]
align 4
@@:
movsb
cmp byte[esi],0
jne @b
mov byte[edi],0
popad
.no_msg:
or eax,-1
pop ebp
ret 12
 
align 4
@copy_path:
mov esi,@cur_dir_path
mov edi,@library_path
200,12 → 239,10
stosb
test eax,eax
jnz .lp4
;---------------------------------------------------------------------
ret
}
;---------------------------------------------------------------------
 
 
 
macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
{
@use_library
215,92 → 252,93
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
local exit
;---------------------------------------------------------------------
; loading Box_Lib library
local i_begin
local i_error
local i_exit
 
mcall 68,19,system_path__ ; load of sys directory
test eax,eax
jnz end_steep
jnz i_begin
 
if point_dir_name__ eq
copy_path library_name__, cur_dir_path__, library_path__,0x0
copy_path library_name__, cur_dir_path__, library_path__,0
else
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library
;the macros making way /current path a program/ + name system library
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__
end if
mcall 68,19,library_path__ ; load of alternative
test eax,eax
jnz end_steep
show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window
jmp exit
 
 
jnz i_begin
push eax
push dword err_message_found_lib__
push dword head_f_l__
jmp i_error
align 4
end_steep:
 
import_boxlib myimport, err_message_import__, head_f_i__ ;import
exit:
i_begin:
import_boxlib myimport
test eax,eax
jz @f
 
jz i_exit
push eax
push dword err_message_import__
push dword head_f_i__
i_error:
call l_lib_init_error_window
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª­® @notify
or eax,-1
@@:
 
i_exit:
}
;---------------------------------------------------------------------
}
 
 
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__
{
local end_steep
local exit
;---------------------------------------------------------------------
; loading Box_Lib library
local i_begin
local i_error
local i_exit
 
if point_dir_name__ eq
copy_path library_name__, cur_dir_path__, library_path__,0x0
copy_path library_name__, cur_dir_path__, library_path__,0
else
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library
;the macros making way /current path a program/ + name system library
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__
end if
 
mcall 68,19,library_path__ ; load of alternative
test eax,eax
jnz end_steep
jnz i_begin
mcall 68,19,system_path__ ; load of sys directory
test eax,eax
jnz end_steep
 
show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window
jmp exit
 
jnz i_begin
push eax
push dword err_message_found_lib__
push dword head_f_l__
jmp i_error
align 4
end_steep:
 
import_boxlib myimport, err_message_import__, head_f_i__ ;import
exit:
i_begin:
import_boxlib myimport
test eax,eax
jz @f
 
jz i_exit
push eax
push dword err_message_found_lib__
push dword head_f_l__
i_error:
call l_lib_init_error_window
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª­® @notify
or eax,-1
@@:
i_exit:
;---------------------------------------------------------------------
}
 
;description:
; ¬ ªà®á § £à㧪¨ ¡¨¡«¨®â¥ª ¨§ á¨á⥬­®© ¯ ¯ª¨, ¥á«¨ ¡¨¡«¨®â¥ª  ­¥ ­ ©¤¥­ 
; ⮣¤  ¯®¨áª ¨¤¥â ¢ ⥪ã饩 ¯ ¯ª¥ á ¯à®£à ¬¬®©
macro sys_load_libraries _start,_end
{
local exit_lp2
local lp2
local lp
local cycle0
local end_steep
local next
local cycle0n
local cycle1
local cycle1n
local cycle1e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
library_name__ equ [ebp]
cur_dir_path__ equ [ebp+4]
316,69 → 354,75
status_lib equ dword [ebp+44]
 
mov ebp,_start
mov ecx,((_end-_start)/ll_struc_size)
 
mov ecx,(_end-_start)/ll_struc_size
align 4
lp: push ecx
cycle0:
push ecx
mcall 68,19,system_path__ ; load of sys directory
test eax,eax
jnz end_steep
 
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library
;the macros making way /current path a program/ + name system library
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__
mcall 68,19,library_path__ ; load of alternative
test eax,eax
jnz end_steep
or status_lib,1 ; status of code - enable error - not found library
 
or status_lib,0x1 ; status of code - enable error - not found library
push eax
push dword err_message_found_lib__
push dword head_f_l__
call l_lib_init_error_window
jmp cycle0n
 
show_error_window err_message_found_lib__, head_f_l__, ;show error message /create window
jmp next
 
align 4
end_steep:
mov adr_load_lib,eax ;save adr lib in memory
import_boxlib my_import, err_message_import__, head_f_i__ ;import
 
import_boxlib my_import
test eax,eax
jz next
 
or status_lib,0x2 ; status of code - enable error - import error
 
next:
jz cycle0n
or status_lib,2 ; status of code - enable error - import error
push eax
push dword err_message_import__
push dword head_f_i__
call l_lib_init_error_window
cycle0n:
pop ecx
add ebp,ll_struc_size
dec ecx
jnz lp
jnz cycle0
 
;----------------------------------
;¢ë¢®¤ á®®¡é¥­¨ï ®¡ ®è¨¡ª¥ ¯à¨ § £à㧪¥
mov ebp,_start
mov ecx,((_end-_start)/ll_struc_size)
 
mov ecx,(_end-_start)/ll_struc_size
align 4
lp2:
cycle1:
mov eax,status_lib
test eax,eax
jz @f
 
jz cycle1n
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª­® @notify
or eax,-1
jmp exit_lp2
 
@@:
mov eax,-1
jmp cycle1e
align 4
cycle1n:
add ebp,ll_struc_size
dec ecx
jnz lp2
exit_lp2:
jnz cycle1
cycle1e:
}
 
;description:
; ¬ ªà®á § £à㧪¨ ¡¨¡«¨®â¥ª ¨§ ⥪ã饩 ¯ ¯ª¨ á ¯à®£à ¬¬®©, ¥á«¨ ¡¨¡«¨®â¥ª  ­¥ ­ ©¤¥­ 
; ⮣¤  ¯®¨áª ¨¤¥â ¢ á¨á⥬­®© ¯ ¯ª¥
macro load_libraries _start,_end
{
local lp2
local exit_lp2
local lp
local cycle0
local end_steep
local next
local cycle0n
local cycle1
local cycle1n
local cycle1e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
library_name__ equ [ebp]
cur_dir_path__ equ [ebp+4]
394,12 → 438,13
status_lib equ dword [ebp+44]
 
mov ebp,_start
mov ecx,((_end-_start)/ll_struc_size)
 
mov ecx,(_end-_start)/ll_struc_size
align 4
lp: push ecx
cycle0:
push ecx
 
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__ ;the macros making way /current pach a program/+ name system library
;the macros making way /current path a program/ + name system library
copy_path library_name__, cur_dir_path__, library_path__,point_dir_name__
 
mcall 68,19,library_path__ ; load of alternative
test eax,eax
408,49 → 453,48
mcall 68,19,system_path__ ; load of sys directory
test eax,eax
jnz end_steep
or status_lib,1 ; status of code - enable error - not found library
 
or status_lib,0x1 ; status of code - enable error - not found library
push eax
push dword err_message_found_lib__
push dword head_f_l__
call l_lib_init_error_window
jmp cycle0n
 
show_error_window err_message_found_lib__, head_f_l__ ;show error message /create window
jmp next
 
align 4
end_steep:
mov adr_load_lib,eax ;save adr lib in memory
 
import_boxlib my_import, err_message_import__, head_f_i__ ;import
 
import_boxlib my_import
test eax,eax
jz next
 
or status_lib,0x2 ; status of code - enable error - import error
 
next:
jz cycle0n
or status_lib,2 ; status of code - enable error - import error
push eax
push dword err_message_import__
push dword head_f_i__
call l_lib_init_error_window
cycle0n:
pop ecx
add ebp,ll_struc_size
dec ecx
jnz lp
jnz cycle0
 
;-----------------------------------------------
;¢ë¢®¤ á®®¡é¥­¨ï ®¡ ®è¨¡ª¥ ¯à¨ § £à㧪¥
mov ebp,_start
mov ecx,((_end-_start)/ll_struc_size)
 
mov ecx,(_end-_start)/ll_struc_size
align 4
lp2:
cycle1:
mov eax,status_lib
test eax,eax
jz @f
 
jz cycle1n
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª­® @notify
or eax,-1
jmp exit_lp2
 
@@:
mov eax,-1
jmp cycle1e
align 4
cycle1n:
add ebp,ll_struc_size
dec ecx
jnz lp2
exit_lp2:
 
jnz cycle1
cycle1e:
}
 
 
468,41 → 512,6
popad ;restore all registers
}
 
; £®â®¢¨¬ ⥪áâ ¤«ï ¯®ª §  ç¥à¥§ @notify:
; 1) ¢ë¤¥«ï¥¬ ¯ ¬ïâì ¢ [arrea_xx]
; 2) ª®¯¨à㥬 err_message ¨ head ¢ [arrea_xx]
macro show_error_window err_message, head
{
local lp0
local lp1
 
pushad
mcall 68,11
mcall 68,12,4096
push eax
pop dword[arrea_xx]
 
mov edi,eax
mov esi,head
cld
align 4
lp0:
movsb
cmp byte[esi],0
jne lp0
mov word[edi],0xa0d
add edi,2
mov esi,dword err_message
align 4
lp1:
movsb
cmp byte[esi],0
jne lp1
mov byte[edi],0
popad
or eax,-1 ;ã¢ë
}
 
; ¢ª«îç ¥¬ ¯®ª § á®®¡é¥­¨ï ç¥à¥§ @notify:
macro notify_window_run message
{
516,10 → 525,12
}
 
 
;¢å®¤­ë¥ ¯ à ¬¥âàë:
;input:
;eax -  ¤à¥á ¡¨¡«¨®â¥ª¨ ¢ ¯ ¬ïâ¨
;myimport - ¨¬¯®àâ¨àã¥¬ë¥ ä㭪樨
macro import_boxlib myimport, err_message_import__, head_f_i__
;output:
; eax - ¥á«¨ 㤠筮 â® 0 ¨«¨ 㪠§ â¥«ì ­  ¨¬ï ä㭪樨 ª®â®àãî ­¥ 㤠«®áì § £à㧨âì
macro import_boxlib myimport
{
local import_loop
local import_find
528,7 → 539,6
local import_found
local import_done
local exit
local e.exit
local import_not_found
; initialize import
540,13 → 550,13
jz import_done ;¥á«¨ 㪠§ â¥«ì ­  ¨¬ï ä㭪樨 = 0 (¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥)
push edx ;á®å࠭塞 ­ ç «® ¡¨¡«¨®â¥ç­ëå 㪠§ â¥«¥© ­  ä㭪樨
import_find:
mov ebx, [ds:edx]
mov ebx, [edx]
test ebx, ebx
jz import_not_found ;¥á«¨ 㪠§ â¥«ì ­  ¨¬ï ä㭪樨 = 0 (¢ ¡¨¡«¨®â¥ª¥)
push eax ;eax - 㪠§ â¥«ì ­  ¨¬ï íªá¯®àâ¨à㥬®© ä㭪樨 (¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥)
lp:
mov cl, [ds:eax]
cmp cl, [ds:ebx] ;áà ¢­¨¢ ¥¬ ¨¬¥­  ä㭪権 ¢ ¡¨¡«¨®â¥ª¥ ¨ ¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥
mov cl, [eax]
cmp cl, [ebx] ;áà ¢­¨¢ ¥¬ ¨¬¥­  ä㭪権 ¢ ¡¨¡«¨®â¥ª¥ ¨ ¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥
jnz import_find_next ;¥á«¨ ­ §¢ ­¨ï ­¥ ᮢ¯ «¨
test cl, cl
jz import_found ;¥á«¨ ­ §¢ ­¨ï ᮢ¯ «¨, ¨ 㦥 ª®­¥æ áâப¨ (cl=0)
559,7 → 569,7
jmp import_find
import_found:
pop ebx ;¢®áâ ­ ¢«¨¢ ¥¬ 㪠§ â¥«ì ­  ¨¬ï ä㭪樨 (ª®â®àë© ¡ë« ¢ eax) ¨ ®á¢®¡®¦¤ ¥¬ á⥪
mov eax, [ds:edx+4] ;eax = 㪠§ â¥«ì ­  äã­ªæ¨î (¢ ¡¨¡«¨®â¥ª¥)
mov eax, [edx+4] ;eax = 㪠§ â¥«ì ­  äã­ªæ¨î (¢ ¡¨¡«¨®â¥ª¥)
mov [esi-4], eax ;ª®¯¨à㥬 㪠§ â¥«ì (­  äã­ªæ¨î) ¢ ¯à®£à ¬¬ã, -4 áâ ¢¨¬ ¯®â®¬ã çâ® esi ¡ë«® ᤢ¨­ãâ® ª®¬ ­¤®© lodsd
pop edx ;ãáâ ­ ¢«¨¢ ¥¬ edx ­  ­ ç «® ¡¨¡«¨®â¥ç­ëå ä㭪権
;--- ¯à®¢¥à塞 ᮢ¯ ¤ ¥â «¨ ¨¬ï íªá¯®àâ¨à®¢ ­­®© ä㭪樨 á 'lib_init'
585,13 → 595,13
jmp import_loop
import_not_found:
add esp,4
show_error_window err_message_import__, head_f_i__ ;show error message /create window
jmp e.exit
jmp exit
import_done:
xor eax,eax ;=0 ¢á¥ § £à㧨«®áì 㤠筮
e.exit:
exit:
}
;---------------------------------------------------------------------
}
 
ll_struc_size = 48;($-library_name__) ; constant size of struct
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
{
607,11 → 617,11
.err_message_import__ dd err_message_import__
.head_f_i__ dd head_f_i__
if point_dir_name eq
.point_dir_name__ dd 0x0
.point_dir_name__ dd 0
else
.point_dir_name__ dd point_dir_name ; ¨¬ï ¢«®¦¥­­®© ¤¨à४â®à¨¨ ¢ ªâ®à®© åà ­ïâìáï ¯®¤£à㦠¥¬ë¥ ¬®¤ã«¨.
end if
.adr_load_lib dd 0x0
.status_lib dd 0x0 ;status of load library
.adr_load_lib dd 0
.status_lib dd 0 ;status of load library
;
}