2009-04-15 16:18:53 +04:00
; The macros for load any library/libraries:
; Copyright (c) 2009, <Lrz>
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
; * Neither the name of the <organization> nor the
; names of its contributors may be used to endorse or promote products
; derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka <Lrz> ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
; This macros based on source code:
2013-03-13 18:37:54 +04:00
; <Lrz> - Alexey Teplov / <20> <> <EFBFBD> <EFBFBD> ᥩ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; Mario79, Mario - Marat Zakiyanov / <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ﭮ<EFBFBD>
; Diamondz - Evgeny Grechnikov / <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 筨<EFBFBD> <E7ADA8> <EFBFBD>
2009-04-15 16:18:53 +04:00
;------------------------
; DESCRIPTION
; Macro load_library
; Logick of work.
; A first time we must to check system path, where I belive find a system library. System path is "/sys/lib/".
; If I cannot found my library, i must to check second way. Second way is current dirrectory.
; If we cannot load library, we must show the error message:
; "I'm sorry,the programm cannot found system library box_lib.obj."
; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
2009-05-08 21:45:28 +04:00
;
2009-04-15 16:18:53 +04:00
;
;---------------------------------------------------------------------
2009-05-08 21:45:28 +04:00
; Macro sys_load_library
2009-04-15 16:18:53 +04:00
; A first time we must to check own path in current dirrectory the program, where I belive find a system library.
; If I cannot found my library, i must to check second way. Second way is system path a "/sys/lib/".
; If we cannot load library, we must show the error message:
; "I'm sorry,the programm cannot found system library box_lib.obj."
; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
2009-05-08 21:45:28 +04:00
;
;---------------------------------------------------------------------
; How can I use it?
;---------------------------------------------------------------------
;-Example using single load library
;-universal load library/librarys
2009-07-06 18:27:36 +04:00
;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__
2009-05-08 21:45:28 +04:00
;-if return code =-1 then exit, else normally work
; cmp eax,-1
; jz exit
;- Well, if you get
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2013-03-13 18:37:54 +04:00
;DATA <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;<3B> ᥣ<EFBFBD> <E1A5A3> ᮡ<> <EFBFBD> <EEA4A0> <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> ⥫쭮<E2A5AB> <ECADAE> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> .
2009-07-06 18:27:36 +04:00
;system_path__ db '/sys/lib/'
;library_name__ db 'box_lib.obj',0
2013-03-13 18:37:54 +04:00
; <20> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧꥤ<E0A0A7> <EAA5A4> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> 㦭<EFBFBD> <20> ᯮ<EFBFBD> 짮<EFBFBD> <ECA7AE> <EFBFBD> <EFBFBD> <> <E1ABA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2009-07-06 18:27:36 +04:00
;system_path__ db '/sys/lib/box_lib.obj',0
2013-03-13 18:37:54 +04:00
;... <20> <EFBFBD> <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> ⥫쭮<E2A5AB> <ECADAE> <EFBFBD> <20> <> 㣨<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
2009-07-06 18:27:36 +04:00
;library_name__ db 'box_lib.obj',0
2009-05-08 21:45:28 +04:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2009-07-06 18:27:36 +04:00
;err_message_found_lib__ db 'Sorry I cannot found library box_lib.obj',0
;head_f_i__:
;head_f_l__ db 'System error',0
;err_message_import__ db 'Error on load import library box_lib.obj',0
2009-05-08 21:45:28 +04:00
;myimport:
;
2020-09-29 22:58:14 +03:00
;edit_box_draw dd aEdit_box_draw
;edit_box_key dd aEdit_box_key
;edit_box_mouse dd aEdit_box_mouse
;version_ed dd aVersion_ed
; dd 0,0
2009-05-08 21:45:28 +04:00
;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
2020-11-18 21:11:43 +03:00
macro @use_library mem_alloc,mem_free,mem_realloc,dll_load
2009-05-08 21:45:28 +04:00
{
2009-07-06 18:27:36 +04:00
local lp1
2014-06-27 15:52:25 +04:00
local lp2
local lp3
local lp4
2016-02-18 16:08:33 +03:00
local lp5
local lp6
2013-03-13 18:37:54 +04:00
local file_name
2009-05-08 21:45:28 +04:00
2020-11-18 21:11:43 +03:00
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
2009-05-08 21:45:28 +04:00
2009-07-06 18:27:36 +04:00
align 4
2013-03-13 18:37:54 +04:00
arrea_xx dd 0
2020-10-02 15:33:16 +03:00
file_name db '/sys/@notify',0
2009-05-08 21:45:28 +04:00
2009-07-06 18:27:36 +04:00
align 4
2013-03-13 18:37:54 +04:00
run_notify_struct:
.Function dd 7
.Position dd 0
.Flags dd ?
.Count dd 0
.Buffer dd 0
db 0
.FileName dd file_name
2009-10-12 12:25:30 +04:00
@library_name equ dword [esp+16]
@cur_dir_path equ dword [esp+12]
@library_path equ dword [esp+8]
@point_dir_name equ dword [esp+4]
2009-05-08 21:45:28 +04:00
2020-09-29 22:58:14 +03:00
;description:
; <20> <> ⮢<EFBFBD> <E2AEA2> ⥪<> <E2A5AA> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> १ @notify:
; 1) <20> 뤥<EFBFBD> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> [arrea_xx] <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<>
; 2) <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> 㭪樨 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ) <20> ⥪<> <E2A5AA> ᮮ<> 饭<EFBFBD> <E9A5AD> <20> [arrea_xx]
;input:
; ebp+8 - head message
; ebp+12 - error message
; ebp+16 - 0 <20> <> <EFBFBD> <20> <> <EFBFBD> <20> 㭪樨, <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <20> <> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD>
;output:
; eax = -1
align 4
l_lib_init_error_window:
push ebp
mov ebp,esp
cmp dword[arrea_xx],0
jne .no_msg ;<3B> ࠭<> <E0A0AD> <EFBFBD> <20> 뫮 ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <20> <> 㣮<EFBFBD> ᮮ<> 饭<EFBFBD> <E9A5AD>
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
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <20> 㭪樨 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
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
2009-05-08 21:45:28 +04:00
align 4
@copy_path:
2015-11-05 18:25:54 +03:00
mov esi,@cur_dir_path
mov edi,@library_path
xor eax,eax
cld
2009-10-12 12:25:30 +04:00
align 4
2009-05-08 21:45:28 +04:00
.lp1:
2015-11-05 18:25:54 +03:00
lodsb
stosb
test eax,eax
jnz .lp1
mov esi,edi
dec esi ;<3B> <> <EFBFBD> <EFBFBD> 室 <20> <> ᨬ<> <E1A8AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> @cur_dir_path
std
2009-10-12 12:25:30 +04:00
align 4
2009-05-08 21:45:28 +04:00
.lp2:
2015-11-05 18:25:54 +03:00
lodsb
cmp al,'/'
jnz .lp2
mov edi,esi
add edi,2
cld
mov esi,@point_dir_name
test esi,esi
2009-10-12 12:25:30 +04:00
jz .str_lp4
2009-05-08 21:45:28 +04:00
2016-02-18 16:08:33 +03:00
;<3B> <EFBFBD> ઠ <20> ⭮<EFBFBD> <E2ADAE> ⥫<EFBFBD> <E2A5AB> <EFBFBD> <EFBFBD> <20> <> ⥩ c <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 窠<EFBFBD> <E7AAA0> '../'
cmp word[esi],'..'
jne .lp3
dec edi ;<3B> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 室<EFBFBD> <20> <> '/'
.lp6:
add esi,3 ;<3B> ய<EFBFBD> ᪠<EFBFBD> <E1AAA0> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨥ '../'
.lp5:
dec edi ;<3B> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp byte[edi],'/'
jnz .lp5
cmp word[esi],'..'
je .lp6
inc edi ;<3B> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 室<EFBFBD> <20> <> '/'
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <20> ⭮<EFBFBD> <E2ADAE> ⥫쭮<E2A5AB> <ECADAE> <20> <> <EFBFBD> <EFBFBD>
2009-10-12 12:25:30 +04:00
align 4
2009-05-08 21:45:28 +04:00
.lp3:
2015-11-05 18:25:54 +03:00
lodsb
stosb
test eax,eax
jnz .lp3
dec edi
2009-10-12 12:25:30 +04:00
.str_lp4:
mov esi,@library_name
align 4
.lp4:
2015-11-05 18:25:54 +03:00
lodsb
stosb
test eax,eax
jnz .lp4
ret
2009-05-08 21:45:28 +04:00
}
2020-09-29 22:58:14 +03:00
;---------------------------------------------------------------------
2009-05-08 21:45:28 +04:00
2010-06-09 01:43:19 +04:00
macro @use_library_mem mem_alloc,mem_free,mem_realloc,dll_load
{
2020-11-18 21:11:43 +03:00
@use_library mem_alloc,mem_free,mem_realloc,dll_load
2010-06-09 01:43:19 +04:00
}
2009-10-12 12:25:30 +04:00
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__
2009-04-15 16:18:53 +04:00
{
2020-09-29 22:58:14 +03:00
local i_begin
local i_error
local i_exit
2009-04-15 16:18:53 +04:00
2020-09-29 22:58:14 +03:00
mcall 68,19,system_path__ ; load of sys directory
test eax,eax
jnz i_begin
2009-04-15 16:18:53 +04:00
2009-10-12 12:25:30 +04:00
if point_dir_name__ eq
2020-11-18 21:11:43 +03:00
copy_path library_name__, [32], library_path__,0
2009-10-12 12:25:30 +04:00
else
2020-09-29 22:58:14 +03:00
;the macros making way /current path a program/ + name system library
2020-11-18 21:11:43 +03:00
copy_path library_name__, [32], library_path__,point_dir_name__
2020-09-29 22:58:14 +03:00
end if
mcall 68,19,library_path__ ; load of alternative
test eax,eax
jnz i_begin
push eax
push dword err_message_found_lib__
push dword head_f_l__
jmp i_error
2009-05-08 21:45:28 +04:00
align 4
2020-09-29 22:58:14 +03:00
i_begin:
import_boxlib myimport
test eax,eax
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] ; ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> @notify
i_exit:
2009-04-15 16:18:53 +04:00
}
2020-09-29 22:58:14 +03:00
;---------------------------------------------------------------------
2009-04-15 16:18:53 +04:00
2009-10-12 12:25:30 +04:00
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__
2009-04-15 16:18:53 +04:00
{
2020-09-29 22:58:14 +03:00
local i_begin
local i_error
local i_exit
2009-04-15 16:18:53 +04:00
2009-10-12 12:25:30 +04:00
if point_dir_name__ eq
2020-11-18 21:11:43 +03:00
copy_path library_name__, [32], library_path__,0
2009-10-12 12:25:30 +04:00
else
2020-09-29 22:58:14 +03:00
;the macros making way /current path a program/ + name system library
2020-11-18 21:11:43 +03:00
copy_path library_name__, [32], library_path__,point_dir_name__
2020-09-29 22:58:14 +03:00
end if
mcall 68,19,library_path__ ; load of alternative
test eax,eax
jnz i_begin
mcall 68,19,system_path__ ; load of sys directory
test eax,eax
jnz i_begin
push eax
push dword err_message_found_lib__
push dword head_f_l__
jmp i_error
2009-05-08 21:45:28 +04:00
align 4
2020-09-29 22:58:14 +03:00
i_begin:
import_boxlib myimport
test eax,eax
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] ; ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> @notify
i_exit:
2009-04-15 16:18:53 +04:00
;---------------------------------------------------------------------
}
2020-09-29 22:58:14 +03:00
;description:
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㧪<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪ <20> <> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; ⮣<> <E2AEA3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ⥪<> 饩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ணࠬ<E0AEA3> <E0A0AC> <EFBFBD>
2009-05-08 21:45:28 +04:00
macro sys_load_libraries _start,_end
2009-04-15 16:18:53 +04:00
{
2020-09-29 22:58:14 +03:00
local cycle0
2009-04-15 16:18:53 +04:00
local end_steep
2020-09-29 22:58:14 +03:00
local cycle0n
local cycle1
local cycle1n
local cycle1e
2009-05-08 21:45:28 +04:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2009-07-06 18:27:36 +04:00
library_name__ equ [ebp]
2020-11-18 21:11:43 +03:00
library_path__ equ [ebp+4]
system_path__ equ [ebp+8]
err_message_found_lib__ equ [ebp+12]
head_f_l__ equ [ebp+16]
my_import equ [ebp+20]
err_message_import__ equ [ebp+24]
head_f_i__ equ [ebp+28]
point_dir_name__ equ [ebp+32]
adr_load_lib equ dword [ebp+36]
status_lib equ dword [ebp+40]
2009-05-08 21:45:28 +04:00
2020-09-29 22:58:14 +03:00
mov ebp,_start
mov ecx,(_end-_start)/ll_struc_size
2009-05-08 21:45:28 +04:00
align 4
2020-09-29 22:58:14 +03:00
cycle0:
push ecx
2009-07-06 18:27:36 +04:00
mcall 68,19,system_path__ ; load of sys directory
2009-04-15 16:18:53 +04:00
test eax,eax
jnz end_steep
2020-09-29 22:58:14 +03:00
;the macros making way /current path a program/ + name system library
2020-11-18 21:11:43 +03:00
copy_path library_name__, [32], library_path__,point_dir_name__
2009-04-15 16:18:53 +04:00
2009-07-06 18:27:36 +04:00
mcall 68,19,library_path__ ; load of alternative
2009-04-15 16:18:53 +04:00
test eax,eax
jnz end_steep
2020-09-29 22:58:14 +03:00
or status_lib,1 ; status of code - enable error - not found library
2009-04-15 16:18:53 +04:00
2020-09-29 22:58:14 +03:00
push eax
push dword err_message_found_lib__
push dword head_f_l__
call l_lib_init_error_window
jmp cycle0n
2009-04-15 16:18:53 +04:00
2009-05-08 21:45:28 +04:00
align 4
2020-09-29 22:58:14 +03:00
end_steep:
mov adr_load_lib,eax ;save adr lib in memory
import_boxlib my_import
test eax,eax
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 cycle0
;<3B> 뢮<EFBFBD> ᮮ<> 饭<EFBFBD> <E9A5AD> <20> <> <20> 訡<EFBFBD> <E8A8A1> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㧪<EFBFBD>
mov ebp,_start
mov ecx,(_end-_start)/ll_struc_size
2009-07-06 18:27:36 +04:00
align 4
2020-09-29 22:58:14 +03:00
cycle1:
mov eax,status_lib
test eax,eax
jz cycle1n
notify_window_run [arrea_xx] ; ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> @notify
mov eax,-1
jmp cycle1e
align 4
cycle1n:
add ebp,ll_struc_size
dec ecx
jnz cycle1
cycle1e:
2009-05-08 21:45:28 +04:00
}
2009-04-15 16:18:53 +04:00
2020-09-29 22:58:14 +03:00
;description:
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㧪<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪ <20> <> ⥪<> 饩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ணࠬ<E0AEA3> <E0A0AC> <EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; ⮣<> <E2AEA3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2009-05-08 21:45:28 +04:00
macro load_libraries _start,_end
2009-04-15 16:18:53 +04:00
{
2020-09-29 22:58:14 +03:00
local cycle0
2009-05-08 21:45:28 +04:00
local end_steep
2020-09-29 22:58:14 +03:00
local cycle0n
local cycle1
local cycle1n
local cycle1e
2009-05-08 21:45:28 +04:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2009-07-06 18:27:36 +04:00
library_name__ equ [ebp]
2020-11-18 21:11:43 +03:00
library_path__ equ [ebp+4]
system_path__ equ [ebp+8]
err_message_found_lib__ equ [ebp+12]
head_f_l__ equ [ebp+16]
my_import equ [ebp+20]
err_message_import__ equ [ebp+24]
head_f_i__ equ [ebp+28]
point_dir_name__ equ [ebp+32]
adr_load_lib equ dword [ebp+36]
status_lib equ dword [ebp+40]
2009-05-08 21:45:28 +04:00
2020-09-29 22:58:14 +03:00
mov ebp,_start
mov ecx,(_end-_start)/ll_struc_size
2009-05-08 21:45:28 +04:00
align 4
2020-09-29 22:58:14 +03:00
cycle0:
push ecx
2009-05-08 21:45:28 +04:00
2020-09-29 22:58:14 +03:00
;the macros making way /current path a program/ + name system library
2020-11-18 21:11:43 +03:00
copy_path library_name__, [32], library_path__,point_dir_name__
2009-05-08 21:45:28 +04:00
2020-09-29 22:58:14 +03:00
mcall 68,19,library_path__ ; load of alternative
test eax,eax
jnz end_steep
2009-04-15 16:18:53 +04:00
2020-09-29 22:58:14 +03:00
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
2009-04-15 16:18:53 +04:00
2020-09-29 22:58:14 +03:00
push eax
push dword err_message_found_lib__
push dword head_f_l__
call l_lib_init_error_window
jmp cycle0n
2009-05-08 21:45:28 +04:00
align 4
2020-09-29 22:58:14 +03:00
end_steep:
mov adr_load_lib,eax ;save adr lib in memory
import_boxlib my_import
test eax,eax
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 cycle0
;<3B> 뢮<EFBFBD> ᮮ<> 饭<EFBFBD> <E9A5AD> <20> <> <20> 訡<EFBFBD> <E8A8A1> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㧪<EFBFBD>
mov ebp,_start
mov ecx,(_end-_start)/ll_struc_size
2009-07-06 18:27:36 +04:00
align 4
2020-09-29 22:58:14 +03:00
cycle1:
mov eax,status_lib
test eax,eax
jz cycle1n
notify_window_run [arrea_xx] ; ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> @notify
mov eax,-1
jmp cycle1e
align 4
cycle1n:
add ebp,ll_struc_size
dec ecx
jnz cycle1
cycle1e:
2009-04-15 16:18:53 +04:00
}
2009-05-08 21:45:28 +04:00
2009-10-12 12:25:30 +04:00
macro copy_path lib_name,dir_path,lib_path,point_dir_name
2009-04-15 16:18:53 +04:00
{
2016-02-18 16:08:33 +03:00
pushad ;save all registers
push dword lib_name
push dword dir_path
push dword lib_path
push dword point_dir_name
call @copy_path
add esp,16
;notify_window_run lib_path ;unblok for test load path
popad ;restore all registers
2009-04-15 16:18:53 +04:00
}
2013-03-13 18:37:54 +04:00
; <20> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᮮ<> 饭<EFBFBD> <E9A5AD> <20> <> १ @notify:
macro notify_window_run message
{
push eax ebx
mov eax,message ;<3B> <> ࠬ<EFBFBD> <E0A0AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
2019-01-24 01:08:19 +03:00
mov [run_notify_struct.Flags],eax
2013-03-13 18:37:54 +04:00
mov eax,70 ;run @notify
mov ebx,run_notify_struct
int 0x40
pop ebx eax
2009-05-08 21:45:28 +04:00
}
2020-09-29 22:58:14 +03:00
;input:
; eax - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; myimport - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> 㭪樨
;output:
; eax - <20> 㤠筮 <20> <> 0 <20> <> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <20> 㭪樨 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㧨<EFBFBD> <E3A7A8>
macro import_boxlib myimport
2009-04-15 16:18:53 +04:00
{
local import_loop
local import_find
local lp
local import_find_next
local import_found
local import_done
local exit
2009-05-08 21:45:28 +04:00
local import_not_found
2009-04-15 16:18:53 +04:00
; initialize import
2009-05-08 21:45:28 +04:00
2009-04-15 16:18:53 +04:00
mov edx, eax
mov esi,myimport
import_loop:
2013-03-13 18:37:54 +04:00
lodsd ;mov eax,dword[esi] ;add esi,4 ;<3B> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> <20> eax 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> 㭪樨
2009-04-15 16:18:53 +04:00
test eax, eax
2013-03-13 18:37:54 +04:00
jz import_done ;<3B> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <20> 㭪樨 = 0 (<28> <20> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <EFBFBD> <20> ணࠬ<E0AEA3> <E0A0AC> )
push edx ;<3B> <> <EFBFBD> ࠭塞 <20> <> 砫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <E2A5AB> <20> <> <20> 㭪樨
2009-04-15 16:18:53 +04:00
import_find:
2020-09-29 22:58:14 +03:00
mov ebx, [edx]
2009-04-15 16:18:53 +04:00
test ebx, ebx
2013-03-13 18:37:54 +04:00
jz import_not_found ;<3B> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <20> 㭪樨 = 0 (<28> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> )
push eax ;eax - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <20> <> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> 㥬<EFBFBD> <E3A5AC> <20> 㭪樨 (<28> <20> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <EFBFBD> <20> ணࠬ<E0AEA3> <E0A0AC> )
2009-04-15 16:18:53 +04:00
lp:
2020-09-29 22:58:14 +03:00
mov cl, [eax]
cmp cl, [ebx] ;<3B> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪権 <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> <20> <20> <20> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <EFBFBD> <20> ணࠬ<E0AEA3> <E0A0AC>
2013-03-13 18:37:54 +04:00
jnz import_find_next ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ᮢ<> <E1AEA2> <EFBFBD> <EFBFBD>
2009-04-15 16:18:53 +04:00
test cl, cl
2013-03-13 18:37:54 +04:00
jz import_found ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<> <E1AEA2> <EFBFBD> <EFBFBD> , <20> 㦥 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD> (cl=0)
2009-04-15 16:18:53 +04:00
inc eax
inc ebx
jmp lp
import_find_next:
pop eax
2013-03-13 18:37:54 +04:00
add edx, 8 ;8 = 4 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 4 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD>
2009-04-15 16:18:53 +04:00
jmp import_find
import_found:
2013-03-13 18:37:54 +04:00
pop ebx ;<3B> <> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <20> 㭪樨 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> eax) <20> <20> <EFBFBD> <E1A2AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⥪
2020-09-29 22:58:14 +03:00
mov eax, [edx+4] ;eax = 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> (<28> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> )
2013-03-13 18:37:54 +04:00
mov [esi-4], eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 㪠<> <E3AAA0> ⥫<EFBFBD> (<28> <> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> ) <20> <20> ணࠬ<E0AEA3> <E0A0AC> , -4 <20> ⠢<EFBFBD> <E2A0A2> <20> <> ⮬<EFBFBD> <20> <> <EFBFBD> esi <20> 뫮 ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> lodsd
pop edx ;<3B> <> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> edx <20> <> <20> <> 砫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪権
;--- <20> <EFBFBD> <E0AEA2> 塞 ᮢ<> <E1AEA2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <20> <> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨 <20> 'lib_init'
2020-11-18 21:11:43 +03:00
if library_fun_memory_alloc eq
2010-06-09 01:43:19 +04:00
else
cmp dword[ebx],'lib_'
jne import_loop
cmp dword[ebx+4],'init'
jne import_loop
2013-03-13 18:37:54 +04:00
;--- <20> <20> <> <EFBFBD> <20> 㭪樨 ᮢ<> <E1AEA2> <EFBFBD> <EFBFBD> <20> 'lib_init' <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20>
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祭<EFBFBD> <E7A5AD> <20> 㭪権 <20> <> <EFBFBD> ࠡ<> <E0A0A1> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-06-09 01:43:19 +04:00
;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
2009-04-15 16:18:53 +04:00
jmp import_loop
2009-05-08 21:45:28 +04:00
import_not_found:
2009-04-15 16:18:53 +04:00
add esp,4
2020-09-29 22:58:14 +03:00
jmp exit
2009-04-15 16:18:53 +04:00
import_done:
2013-03-13 18:37:54 +04:00
xor eax,eax ;=0 <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㧨<EFBFBD> <E3A7A8> <EFBFBD> <EFBFBD> 㤠筮
2020-09-29 22:58:14 +03:00
exit:
}
2009-04-15 16:18:53 +04:00
;---------------------------------------------------------------------
2020-09-29 22:58:14 +03:00
2020-11-18 21:11:43 +03:00
ll_struc_size = 44;($-library_name__) ; constant size of struct
2009-10-12 12:25:30 +04:00
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
2009-05-08 21:45:28 +04:00
{
2013-03-13 18:37:54 +04:00
.library_name__ dd library_name__ ; <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㦠<EFBFBD> <E3A6A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD>
2009-07-06 18:27:36 +04:00
2013-03-13 18:37:54 +04:00
.library_path__ dd library_path__ ; 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <20> 㤥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ਬ<EFBFBD> <EFBFBD> <E0AEA2> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> , <20> <20> 㦭<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E1ABA8> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ᪠ <20> ணࠬ<E0AEA3> <E0A0AC> , <20> <> <EFBFBD> 筮 <20> 㦭<EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> <20> <> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⮩ <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
.complete_path dd system_path__ ; <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ⪮ ᮤ<> ন<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2009-07-06 18:27:36 +04:00
.err_message_found_lib__ dd err_message_found_lib__
.head_f_l__ dd head_f_l__
2009-10-12 12:25:30 +04:00
.my_import dd my_import
2009-07-06 18:27:36 +04:00
.err_message_import__ dd err_message_import__
.head_f_i__ dd head_f_i__
2009-10-12 12:25:30 +04:00
if point_dir_name eq
2020-09-29 22:58:14 +03:00
.point_dir_name__ dd 0
2009-10-12 12:25:30 +04:00
else
2013-03-13 18:37:54 +04:00
.point_dir_name__ dd point_dir_name ; <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ४<EFBFBD> <E0A5AA> ਨ <20> <20> <> <EFBFBD> ன <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㦠<EFBFBD> <E3A6A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㫨.
2009-10-12 12:25:30 +04:00
end if
2020-09-29 22:58:14 +03:00
.adr_load_lib dd 0
.status_lib dd 0 ;status of load library
2009-05-08 21:45:28 +04:00
;
}