1,3 → 1,5 |
;13.03.2013 - use @notify |
;08.06.2010 - new macros @use_library_mem |
;08.05.2009 - bugfix |
;14.04.2009 - a macros for code load library the box_lib.obj from '/sys/lib/' or current dirrectory. |
; The macros for load any library/libraries: |
27,9 → 29,9 |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; This macros based on source code: |
; <Lrz> - Alexey Teplov / Àëåêñåé Òåïëîâ |
; Mario79, Mario - Marat Zakiyanov / Ìàðàò Çàêèÿíîâ |
; Diamondz - Evgeny Grechnikov / Åâãåíèé Ãðå÷íèêîâ |
; <Lrz> - Alexey Teplov / «¥ªá¥© ¥¯«®¢ |
; Mario79, Mario - Marat Zakiyanov / à â ª¨ï®¢ |
; Diamondz - Evgeny Grechnikov /
¢£¥¨© à¥ç¨ª®¢ |
;------------------------ |
; DESCRIPTION |
; Macro load_library |
62,13 → 64,13 |
;- Well, if you get |
; |
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
;DATA äàííûå |
;Âñåãäà ñîáëþäàòü ïîñëåäîâàòåëüíîñòü â èìåíè. |
;DATA ¤ ë¥ |
;ᥣ¤ ᮡ«î¤ âì ¯®á«¥¤®¢ ⥫ì®áâì ¢ ¨¬¥¨. |
;system_path__ db '/sys/lib/' |
;library_name__ db 'box_lib.obj',0 |
; Åñëè åñòü æåëàíèå ðàçúåäèíèòü, òî íóæíî èñïîëüçîâàòü ñëåäóþùèþ êîíñòðóêöèþ |
;
᫨ ¥áâì ¦¥« ¨¥ à §ê¥¤¨¨âì, ⮠㦮 ¨á¯®«ì§®¢ âì á«¥¤ãîé¨î ª®áâàãªæ¨î |
;system_path__ db '/sys/lib/box_lib.obj',0 |
;... ëþáàÿ ïîñëåäîâàòåëüíîñòü äðóãèõ êîìàíä è îïðåäåëåíèé. |
;... «î¡ ï ¯®á«¥¤®¢ ⥫ì®áâì ¤àã£¨å ª®¬ ¤ ¨ ®¯à¥¤¥«¥¨©. |
;library_name__ db 'box_lib.obj',0 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
112,158 → 114,25 |
macro @use_library |
{ |
|
local __sc |
local lp |
local lp1 |
local correction |
local exit_ |
local file_name |
|
library_fun_memory_alloc equ 0 ;íå èñïîëüçîâàòü â ìàêðîñàõ ïðîâåðêó íà ôóíêöèè 'lib_init' |
err_message1 equ dword [esp+8] |
head1 equ dword [esp+4] |
library_fun_memory_alloc equ 0 ;¥ ¨á¯®«ì§®¢ âì ¢ ¬ ªà®á å ¯à®¢¥àªã äãªæ¨¨ 'lib_init' |
|
|
__sc.frame equ dword [__sc+0] |
__sc.grab equ dword [__sc+4] |
__sc.grab_button equ dword [__sc+8] |
__sc.grab_button_text equ dword [__sc+12] |
__sc.grab_text equ dword [__sc+16] |
__sc.work equ dword [__sc+20] |
__sc.work_button equ dword [__sc+24] |
__sc.work_button_text equ dword [__sc+28] |
__sc.work_text equ dword [__sc+32] |
__sc.work_graph equ dword [__sc+36] |
|
;;;;;;;;;;;CALC WIDTH & HIGHT WINDOW & CENTER MONITOR POSITION;;;;;;;;;; |
show_err_: |
;check memory |
push dword [arrea_xx] |
pop eax |
test eax,eax |
jnz @f |
|
mcall 68,11 |
mcall 68,12,4096 |
push eax |
pop dword [arrea_xx] |
|
push head1 |
pop dword[eax] |
|
push 0x0 |
pop dword[eax+4] |
|
@@: |
mov eax,48 ;get system color |
mov ebx,3 |
mov ecx,__sc |
mov edx,sizeof.system_colors |
mcall |
;----------------------------------- |
xor eax,eax |
mov esi,err_message1 |
mov ecx,30 |
align 4 |
lp: add ecx,7 |
lodsb |
test eax,eax |
jnz lp |
arrea_xx dd 0 |
file_name db '/rd/1/@notify',0 |
|
push dword [arrea_xx] |
pop ebp |
|
align 4 |
@@: add ebp,4 |
mov eax,dword [ebp] |
|
test eax,eax |
jnz @b |
|
push err_message1 |
pop dword[ebp] |
|
mov dword [ebp+4],eax |
|
mcall 48,5 ;get system window |
cmp word[on_x],cx |
jae @f; íå íóæíî îáíîâëÿòü |
|
sub eax,ecx |
shl eax,15 |
mov ax,cx |
mov dword [on_x],eax |
|
@@: |
add word [on_y],12 |
sub bx,word [on_y] |
shl ebx,15 |
mov bx,word [on_y] |
mov dword [on_y],ebx |
|
ret |
|
|
;;;;;;;;;;;DRAW WINDOW;;;;;;;;;;;;;; |
align 4 |
start__: |
mcall 40,0x5 ;set mask on events rewraw window and get id button. |
.red_win: |
;draw_window: |
mcall 12,1 |
|
xor eax,eax |
mov ebp,dword [arrea_xx] ; set point |
mov ebx,dword [on_x] |
mov ecx,dword [on_y] |
mov edx,__sc.work |
or edx,0x33000000 |
mov esi,__sc.grab_text |
xor edi,edi |
mov edi,dword [ebp] ;head1 |
mcall |
|
mov ebx,(10*65536+25-12) |
add ebp,4 ;inc index |
|
@@: |
mov eax,4 |
add bx,12 |
mov ecx,__sc.grab_text |
or ecx,0x90000000 |
mov edx,dword [ebp] ;err_message1 |
mcall |
|
add ebp,4 ;inc index |
|
mov eax,dword [ebp] |
test eax,eax |
jnz @b |
|
mcall 12,2 |
align 4 |
|
.still: ;main loop |
mcall 10 ;wait event |
dec eax |
jz .red_win |
sub eax,2 |
jnz .still ;go to main loop |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
.button: |
mcall 17 ;get id button |
test ah,ah ;if in ah 0, then go to still |
jz .still |
mcall -1 |
ret |
|
align 4 |
__sc system_colors |
on_x dd 0x0 |
on_y dd 0x0000004E |
arrea_xx dd 0x0 |
rb 0x50 |
end_tr: |
|
run_notify_struct: |
.Function dd 7 |
.Position dd 0 |
.Flags dd ? |
.Count dd 0 |
.Buffer dd 0 |
db 0 |
.FileName dd file_name |
;--------------------------------------------------------------------- |
|
@library_name equ dword [esp+16] |
368,7 → 237,7 |
test eax,eax |
jz @f |
|
mcall 51,1,start__,end_tr ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó |
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify |
or eax,-1 |
@@: |
|
408,7 → 277,7 |
test eax,eax |
jz @f |
|
mcall 51,1,start__,end_tr ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó |
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify |
or eax,-1 |
@@: |
|
481,7 → 350,7 |
test eax,eax |
jz @f |
|
mcall 51,1,start__,end_tr ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó |
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify |
or eax,-1 |
jmp exit_lp2 |
|
561,7 → 430,7 |
test eax,eax |
jz @f |
|
mcall 51,1,start__,end_tr ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó |
notify_window_run [arrea_xx] ; ᮧ¤ ¥¬ ®ª® @notify |
or eax,-1 |
jmp exit_lp2 |
|
587,22 → 456,57 |
popad ;restore all registers |
} |
|
; £®â®¢¨¬ ⥪áâ ¤«ï ¯®ª § ç¥à¥§ @notify: |
; 1) ¢ë¤¥«ï¥¬ ¯ ¬ïâì ¢ [arrea_xx] |
; 2) ª®¯¨à㥬 err_message ¨ head ¢ [arrea_xx] |
macro show_error_window err_message, head |
{ pushad ;save all registers |
push dword err_message |
push dword head |
{ |
local lp0 |
local lp1 |
|
call show_err_ |
pushad |
mcall 68,11 |
mcall 68,12,4096 |
push eax |
pop dword [arrea_xx] |
|
add esp,8 |
popad ;restore all registers |
or eax,-1 ;óâû |
mov edi,eax |
mov esi,dword head |
cld |
align 4 |
lp0: |
movsb |
cmp byte[esi],0 |
jne lp0 |
mov word[edi],'. ' |
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 |
{ |
push eax ebx |
mov eax,message ;¯ à ¬¥âàë ¤«ï ª®¬ ¤®© áâப¨ |
mov [run_notify_struct.Flags], eax |
mov eax,70 ;run @notify |
mov ebx,run_notify_struct |
int 0x40 |
pop ebx eax |
} |
|
;âõîäíûå ïàðàìåòðû: |
;eax - àäðåñ áèáëèîòåêè â ïàìÿòè |
;myimport - èìïîðòèðóåìûå ôóíêöèè |
|
;¢å®¤ë¥ ¯ à ¬¥âàë: |
;eax - ¤à¥á ¡¨¡«¨®â¥ª¨ ¢ ¯ ¬ï⨠|
;myimport - ¨¬¯®àâ¨àã¥¬ë¥ äãªæ¨¨ |
macro import_boxlib myimport, err_message_import__, head_f_i__ |
{ |
local import_loop |
619,34 → 523,34 |
mov edx, eax |
mov esi,myimport |
import_loop: |
lodsd ;mov eax,dword[esi] ;add esi,4 ;ïîëó÷àåì â eax óêàçàòåëü íà èìÿ èìïîðòèðóåìîé ôóíêöèè |
lodsd ;mov eax,dword[esi] ;add esi,4 ;¯®«ãç ¥¬ ¢ eax 㪠§ â¥«ì ¨¬ï ¨¬¯®àâ¨à㥬®© äãªæ¨¨ |
test eax, eax |
jz import_done ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â ïîëüçîâàòåëüñêîé ïðîãðàììå) |
push edx ;ñîõðàíÿåì íà÷àëî áèáëèîòå÷íûõ óêàçàòåëåé íà ôóíêöèè |
jz import_done ;¥á«¨ 㪠§ â¥«ì ¨¬ï äãªæ¨¨ = 0 (¢ ¯®«ì§®¢ ⥫ì᪮© ¯à®£à ¬¬¥) |
push edx ;á®åà 塞 ç «® ¡¨¡«¨®â¥çëå 㪠§ ⥫¥© äãªæ¨¨ |
import_find: |
mov ebx, [ds:edx] |
test ebx, ebx |
jz import_not_found ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â áèáëèîòåêå) |
push eax ;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 ;åñëè íàçâàíèÿ ñîâïàëè, è óæå êîíåö ñòðîêè (cl=0) |
jz import_found ;¥á«¨ §¢ ¨ï ᮢ¯ «¨, ¨ 㦥 ª®¥æ áâப¨ (cl=0) |
inc eax |
inc ebx |
jmp lp |
import_find_next: |
pop eax |
add edx, 8 ;8 = 4 áàéòà óêàçàòåëü íà íàçâàíèå è 4 áàéòà óêàçàòåëü íà ôóíêöèþ |
add edx, 8 ;8 = 4 ¡ ©â 㪠§ â¥«ì §¢ ¨¥ ¨ 4 ¡ ©â 㪠§ ⥫ì äãªæ¨î |
jmp import_find |
import_found: |
pop ebx ;âîñòàíàâëèâàåì óêàçàòåëü íà èìÿ ôóíêöèè (êîòîðûé áûë â eax) è îñâîáîæäàåì ñòåê |
mov eax, [ds:edx+4] ;eax = óêàçàòåëü íà ôóíêöèþ (â áèáëèîòåêå) |
mov [esi-4], eax ;êîïèðóåì óêàçàòåëü (íà ôóíêöèþ) â ïðîãðàììó, -4 ñòàâèì ïîòîìó ÷òî esi áûëî ñäâèíóòî êîìàíäîé lodsd |
pop edx ;óñòàíàâëèâàåì edx íà íà÷àëî áèáëèîòå÷íûõ ôóíêöèé |
;--- ïðîâåðÿåì ñîâïàäàåò ëè èìÿ ýêñïîðòèðîâàííîé ôóíêöèè ñ 'lib_init' |
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_' |
653,8 → 557,8 |
jne import_loop |
cmp dword[ebx+4],'init' |
jne import_loop |
;--- åñëè èìÿ ôóíêöèè ñîâïàëî ñ 'lib_init' ïîïàäàåì ñþäà |
;ïîäêëþ÷åíèå ôóíêöèé äëÿ ðàáîòû ñ ïàìÿòüþ |
;--- ¥á«¨ ¨¬ï äãªæ¨¨ ᮢ¯ «® á 'lib_init' ¯®¯ ¤ ¥¬ áî¤ |
;¯®¤ª«î票¥ äãªæ¨© ¤«ï à ¡®âë á ¯ ¬ïâìî |
;push eax |
;call dll.Init |
pushad |
672,7 → 576,7 |
show_error_window err_message_import__, head_f_i__ ;show error message /create window |
jmp e.exit |
import_done: |
xor eax,eax ;=0 âñå çàãðóçèëîñü óäà÷íî |
xor eax,eax ;=0 ¢á¥ § £à㧨«®áì ã¤ ç® |
e.exit: |
;--------------------------------------------------------------------- |
} |
679,11 → 583,11 |
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 |
{ |
.library_name__ dd library_name__ ; èìÿ çàãðóæàåìîé áèáëèîòåêè |
.cur_dir_path__ dd cur_dir_path__ ; óêàçàòåëü íà áóôåð â êîòîðîì ñîäåðæèòüñÿ ïóòü îò êóäà áûëà çàïóùåíà ïðîãðàììà |
.library_name__ dd library_name__ ; ¨¬ï § £à㦠¥¬®© ¡¨¡«¨®â¥ª¨ |
.cur_dir_path__ dd cur_dir_path__ ; 㪠§ â¥«ì ¡ãä¥à ¢ ª®â®à®¬ ᮤ¥à¦¨âìáï ¯ãâì ®â ªã¤ ¡ë« § ¯ãé¥ ¯à®£à ¬¬ |
|
.library_path__ dd library_path__ ; óêàçàòåëü íà áóôåð â êîòîðîì áóäåò ñîôîðèìèðîâàí ïóòü ê áèáëèîòåêè, åñëè íóæíî âû÷èñëèòü ïóòü äî ëèáû ñ ìåñòà çàïóñêà ïðîãðàììû, îáû÷íî íóæíî, â ñëó÷àÿõ, åñëè ëèáà ðàñïîëîæåíà â òîé æå ïàïêå |
.complete_path dd system_path__ ; ïóòü êîòîðûé ÷åòêî ñîäåðæèò ïóòü |
.library_path__ dd library_path__ ; 㪠§ â¥«ì ¡ãä¥à ¢ ª®â®à®¬ ¡ã¤¥â á®ä®à¨¬¨à®¢ ¯ãâì ª ¡¨¡«¨®â¥ª¨, ¥á«¨ 㦮 ¢ëç¨á«¨âì ¯ãâì ¤® «¨¡ë á ¬¥áâ § ¯ã᪠¯à®£à ¬¬ë, ®¡ëç® ã¦®, ¢ á«ãç ïå, ¥á«¨ «¨¡ à ᯮ«®¦¥ ¢ ⮩ ¦¥ ¯ ¯ª¥ |
.complete_path dd system_path__ ; ¯ãâì ª®â®àë© ç¥âª® ᮤ¥à¦¨â ¯ãâì |
|
.err_message_found_lib__ dd err_message_found_lib__ |
.head_f_l__ dd head_f_l__ |
693,7 → 597,7 |
if point_dir_name eq |
.point_dir_name__ dd 0x0 |
else |
.point_dir_name__ dd point_dir_name ; èìÿ âëîæåííîé äèððåêòîðèè â êòîðîé õðàíÿòüñÿ ïîäãðóæàåìûå ìîäóëè. |
.point_dir_name__ dd point_dir_name ; ¨¬ï ¢«®¦¥®© ¤¨à४â®à¨¨ ¢ ªâ®à®© åà ïâìáï ¯®¤£à㦠¥¬ë¥ ¬®¤ã«¨. |
end if |
.adr_load_lib dd 0x0 |
.status_lib dd 0x0 ;status of load library |