Subversion Repositories Kolibri OS

Rev

Rev 1204 | Rev 4987 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;08.05.2009 - bugfix
  2. ;14.04.2009 - a macros for code load library the box_lib.obj from '/sys/lib/' or current dirrectory.
  3. ; The macros for load any library/libraries:
  4. ; Copyright (c) 2009, <Lrz>
  5. ; All rights reserved.
  6. ;
  7. ; Redistribution and use in source and binary forms, with or without
  8. ; modification, are permitted provided that the following conditions are met:
  9. ;       * Redistributions of source code must retain the above copyright
  10. ;       notice, this list of conditions and the following disclaimer.
  11. ;       * Redistributions in binary form must reproduce the above copyright
  12. ;       notice, this list of conditions and the following disclaimer in the
  13. ;       documentation and/or other materials provided with the distribution.
  14. ;       * Neither the name of the <organization> nor the
  15. ;       names of its contributors may be used to endorse or promote products
  16. ;       derived from this software without specific prior written permission.
  17. ;
  18. ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka <Lrz> ''AS IS'' AND ANY
  19. ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  20. ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  21. ; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
  22. ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  23. ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  24. ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  25. ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  26. ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  27. ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28. ;*****************************************************************************
  29. ; This macros based on source code:
  30. ; <Lrz> - Alexey Teplov / Àëåêñåé Òåïëîâ
  31. ; Mario79, Mario - Marat Zakiyanov / Ìàðàò Çàêèÿíîâ
  32. ; Diamondz - Evgeny Grechnikov / Åâãåíèé Ãðå÷íèêîâ
  33. ;------------------------
  34. ; DESCRIPTION
  35. ; Macro load_library
  36. ; Logick of work.
  37. ; A first time we must to check system path, where I belive find a system library. System path is "/sys/lib/".
  38. ; If I cannot found my library, i must to check second way. Second way is current dirrectory.
  39. ; If we cannot load library, we must show the error message:
  40. ; "I'm sorry,the programm cannot found system library box_lib.obj."
  41. ; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
  42. ;
  43. ;
  44. ;---------------------------------------------------------------------
  45. ; Macro sys_load_library
  46. ; A first time we must to check own path in current dirrectory the program, where I belive find a system library.
  47. ; If I cannot found my library, i must to check second way. Second way is system path a "/sys/lib/".
  48. ; If we cannot load library, we must show the error message:
  49. ; "I'm sorry,the programm cannot found system library box_lib.obj."
  50. ; "The find was make on 2 ways: /sys/lib/ and current dirrectory."
  51. ;
  52. ;---------------------------------------------------------------------
  53. ; How can I use it?
  54. ;---------------------------------------------------------------------
  55. ;-Example using single load library
  56. ;-universal load library/librarys
  57. ;load_library  library_name__, cur_dir_path__, library_path__, system_path__, \
  58. ;err_message_found_lib__, head_f_l__, myimport, err_message_import__, head_f_i__
  59. ;-if return code =-1 then exit, else normally work
  60. ;        cmp     eax,-1
  61. ;        jz      exit
  62. ;- Well, if you get
  63. ;
  64. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  65. ;DATA äàííûå
  66. ;Âñåãäà ñîáëþäàòü ïîñëåäîâàòåëüíîñòü â èìåíè.
  67. ;system_path__      db '/sys/lib/'
  68. ;library_name__     db 'box_lib.obj',0
  69. ; Åñëè åñòü æåëàíèå ðàçúåäèíèòü, òî íóæíî èñïîëüçîâàòü ñëåäóþùèþ êîíñòðóêöèþ
  70. ;system_path__      db '/sys/lib/box_lib.obj',0
  71. ;... ëþáàÿ ïîñëåäîâàòåëüíîñòü äðóãèõ êîìàíä è îïðåäåëåíèé.
  72. ;library_name__     db 'box_lib.obj',0
  73. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  74.  
  75. ;err_message_found_lib__   db 'Sorry I cannot found library box_lib.obj',0
  76. ;head_f_i__:
  77. ;head_f_l__        db 'System error',0
  78. ;err_message_import__      db 'Error on load import library box_lib.obj',0
  79.  
  80. ;myimport:  
  81. ;
  82. ;edit_box_draw   dd      aEdit_box_draw
  83. ;edit_box_key    dd      aEdit_box_key
  84. ;edit_box_mouse  dd      aEdit_box_mouse
  85. ;version_ed      dd      aVersion_ed
  86. ;
  87. ;check_box_draw  dd      aCheck_box_draw
  88. ;check_box_mouse dd      aCheck_box_mouse
  89. ;version_ch      dd      aVersion_ch
  90. ;
  91. ;option_box_draw  dd      aOption_box_draw
  92. ;option_box_mouse dd      aOption_box_mouse
  93. ;version_op       dd      aVersion_op
  94.  
  95. ;                dd      0
  96. ;                dd      0
  97. ;
  98. ;aEdit_box_draw  db 'edit_box',0
  99. ;aEdit_box_key   db 'edit_box_key',0
  100. ;aEdit_box_mouse db 'edit_box_mouse',0
  101. ;aVersion_ed     db 'version_ed',0
  102.  
  103. ;aCheck_box_draw  db 'check_box_draw',0
  104. ;aCheck_box_mouse db 'check_box_mouse',0
  105. ;aVersion_ch      db 'version_ch',0
  106.  
  107. ;aOption_box_draw  db 'option_box_draw',0
  108. ;aOption_box_mouse db 'option_box_mouse',0
  109. ;aVersion_op       db 'version_op',0
  110.  
  111. ;---------------------------------------------------------------------
  112. macro @use_library
  113. {
  114.  
  115. local __sc
  116. local lp
  117. local lp1
  118. local correction
  119. local exit_
  120.  
  121. library_fun_memory_alloc equ 0 ;íå èñïîëüçîâàòü â ìàêðîñàõ ïðîâåðêó íà ôóíêöèè 'lib_init'
  122. err_message1     equ    dword [esp+8]
  123. head1            equ    dword [esp+4]
  124.  
  125.  
  126. __sc.frame                equ  dword [__sc+0]
  127. __sc.grab                 equ  dword [__sc+4]
  128. __sc.grab_button          equ  dword [__sc+8]
  129. __sc.grab_button_text     equ  dword [__sc+12]
  130. __sc.grab_text            equ  dword [__sc+16]
  131. __sc.work                 equ  dword [__sc+20]
  132. __sc.work_button          equ  dword [__sc+24]
  133. __sc.work_button_text     equ  dword [__sc+28]
  134. __sc.work_text            equ  dword [__sc+32]
  135. __sc.work_graph           equ  dword [__sc+36]
  136.  
  137. ;;;;;;;;;;;CALC WIDTH & HIGHT WINDOW & CENTER MONITOR POSITION;;;;;;;;;;
  138. show_err_:
  139. ;check memory
  140.         push    dword [arrea_xx]
  141.         pop     eax
  142.         test    eax,eax
  143.         jnz     @f
  144.  
  145.         mcall   68,11
  146.         mcall   68,12,4096
  147.         push    eax
  148.         pop     dword [arrea_xx]
  149.  
  150.         push    head1
  151.         pop     dword[eax]
  152.  
  153.         push    0x0
  154.         pop     dword[eax+4]
  155.  
  156. @@:
  157.         mov     eax,48             ;get system color
  158.         mov     ebx,3
  159.         mov     ecx,__sc
  160.         mov     edx,sizeof.system_colors
  161.         mcall
  162. ;-----------------------------------
  163.         xor     eax,eax
  164.         mov     esi,err_message1
  165.         mov     ecx,30
  166. align 4
  167. lp:     add     ecx,7
  168.         lodsb
  169.         test    eax,eax
  170.         jnz     lp
  171.  
  172.         push    dword [arrea_xx]
  173.         pop     ebp
  174.  
  175. align 4
  176. @@:     add     ebp,4
  177.         mov     eax,dword [ebp]
  178.  
  179.         test    eax,eax
  180.         jnz     @b
  181.  
  182.         push    err_message1
  183.         pop     dword[ebp]
  184.  
  185.         mov     dword [ebp+4],eax
  186.  
  187.         mcall   48,5    ;get system window
  188.         cmp     word[on_x],cx
  189.         jae     @f; íå íóæíî îáíîâëÿòü
  190.  
  191.         sub     eax,ecx
  192.         shl     eax,15
  193.         mov     ax,cx
  194.         mov     dword [on_x],eax
  195.  
  196. @@:
  197.         add     word [on_y],12
  198.         sub     bx,word [on_y]
  199.         shl     ebx,15
  200.         mov     bx,word [on_y]
  201.         mov     dword [on_y],ebx
  202.  
  203.         ret
  204.  
  205.  
  206. ;;;;;;;;;;;DRAW WINDOW;;;;;;;;;;;;;;
  207. align 4
  208. start__:
  209.         mcall   40,0x5         ;set mask on events rewraw window and get id button.
  210. .red_win:
  211. ;draw_window:
  212.         mcall 12,1
  213.  
  214.         xor     eax,eax
  215.         mov     ebp,dword [arrea_xx]      ; set point
  216.         mov     ebx,dword [on_x]
  217.         mov     ecx,dword [on_y]
  218.         mov     edx,__sc.work
  219.         or      edx,0x33000000
  220.         mov     esi,__sc.grab_text
  221.         xor     edi,edi
  222.         mov     edi,dword [ebp]         ;head1
  223.         mcall
  224.  
  225.         mov     ebx,(10*65536+25-12)
  226.         add     ebp,4   ;inc index
  227.  
  228. @@:
  229.         mov     eax,4
  230.         add     bx,12
  231.         mov     ecx,__sc.grab_text
  232.         or      ecx,0x90000000
  233.         mov     edx,dword [ebp]       ;err_message1
  234.         mcall
  235.  
  236.         add     ebp,4   ;inc index
  237.  
  238.         mov     eax,dword [ebp]
  239.         test    eax,eax
  240.         jnz     @b
  241.  
  242.         mcall 12,2
  243. align 4
  244.  
  245. .still:                          ;main loop
  246.         mcall   10              ;wait event
  247.         dec  eax
  248.         jz   .red_win
  249.         sub  eax,2
  250.         jnz  .still   ;go to main loop
  251. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  252. .button:
  253.         mcall   17      ;get id button
  254.         test    ah,ah      ;if in ah 0, then go to still
  255.         jz      .still
  256.         mcall   -1
  257.         ret
  258.  
  259. align 4
  260. __sc     system_colors
  261. on_x     dd     0x0
  262. on_y     dd     0x0000004E
  263. arrea_xx dd     0x0
  264. rb      0x50
  265. end_tr:
  266.  
  267. ;---------------------------------------------------------------------
  268.  
  269. @library_name     equ    dword [esp+16]
  270. @cur_dir_path     equ    dword [esp+12]
  271. @library_path     equ    dword [esp+8]
  272. @point_dir_name   equ    dword [esp+4]
  273.  
  274. align 4
  275. @copy_path:
  276. ;        mov     ebx,@library_name
  277.         mov     esi,@cur_dir_path
  278.         mov     edi,@library_path
  279.  
  280.         xor     eax,eax
  281.         cld
  282. align 4
  283. .lp1:
  284.         lodsb
  285.         stosb
  286.         test    eax,eax
  287.         jnz     .lp1
  288.         mov     esi,edi
  289.  
  290.         std
  291. align 4
  292. .lp2:
  293.         lodsb
  294.         cmp     al,'/'
  295.         jnz     .lp2
  296.         mov     edi,esi
  297.  
  298.         add     edi,2
  299.         cld
  300. ;       mov     esi,@library_name
  301.  
  302.         mov     esi,@point_dir_name
  303.         test    esi,esi
  304.         jz      .str_lp4
  305.  
  306. align 4
  307. .lp3:
  308.         lodsb
  309.         stosb
  310.         test    eax,eax
  311.         jnz     .lp3
  312.  
  313.  
  314.         dec     edi
  315. .str_lp4:
  316.         mov     esi,@library_name
  317. align 4
  318. .lp4:
  319.         lodsb
  320.         stosb
  321.         test    eax,eax
  322.         jnz     .lp4
  323. ;---------------------------------------------------------------------
  324.         ret
  325. }
  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
  336. }
  337.  
  338.  
  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__
  340. {
  341. local end_steep
  342. local exit
  343. ;---------------------------------------------------------------------  
  344. ; loading Box_Lib library
  345.  
  346.         mcall   68,19,system_path__   ; load of sys directory
  347.         test    eax,eax
  348.         jnz     end_steep
  349.  
  350. if point_dir_name__ eq
  351.   copy_path   library_name__, cur_dir_path__, library_path__,0x0
  352. else
  353.   copy_path   library_name__, cur_dir_path__, library_path__,point_dir_name__    ;the macros making way /current pach a program/+ name system library
  354. end if
  355.        
  356.         mcall   68,19,library_path__ ; load of alternative
  357.         test    eax,eax
  358.         jnz     end_steep
  359.         show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
  360.         jmp     exit
  361.  
  362.  
  363. align 4
  364. end_steep:
  365.  
  366.         import_boxlib myimport, err_message_import__, head_f_i__  ;import
  367. exit:
  368.         test    eax,eax
  369.         jz      @f
  370.  
  371.         mcall   51,1,start__,end_tr            ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó
  372.         or      eax,-1
  373. @@:    
  374.  
  375. ;---------------------------------------------------------------------
  376. }
  377.  
  378.  
  379. 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__
  380. {
  381. local end_steep
  382. local exit
  383. ;---------------------------------------------------------------------  
  384. ; loading Box_Lib library
  385.  
  386. if point_dir_name__ eq
  387.   copy_path   library_name__, cur_dir_path__, library_path__,0x0
  388. else
  389.   copy_path   library_name__, cur_dir_path__, library_path__,point_dir_name__    ;the macros making way /current pach a program/+ name system library
  390. end if
  391.  
  392.         mcall   68,19,library_path__ ; load of alternative
  393.         test    eax,eax
  394.         jnz     end_steep
  395.        
  396.         mcall   68,19,system_path__ ; load of sys directory
  397.         test    eax,eax
  398.         jnz     end_steep
  399.  
  400.         show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
  401.         jmp     exit
  402.  
  403. align 4
  404. end_steep:
  405.  
  406.         import_boxlib myimport, err_message_import__, head_f_i__  ;import
  407. exit:
  408.         test    eax,eax
  409.         jz      @f
  410.  
  411.         mcall   51,1,start__,end_tr            ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó
  412.         or      eax,-1
  413. @@:    
  414.        
  415. ;---------------------------------------------------------------------
  416. }
  417. macro sys_load_libraries _start,_end
  418. {
  419. local exit_lp2
  420. local lp2
  421. local lp
  422. local end_steep
  423. local next
  424. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  425. library_name__            equ [ebp]
  426. cur_dir_path__            equ [ebp+4]
  427. library_path__            equ [ebp+8]
  428. system_path__             equ [ebp+12]
  429. err_message_found_lib__   equ [ebp+16]  
  430. head_f_l__                equ [ebp+20]
  431. my_import                 equ [ebp+24]
  432. err_message_import__      equ [ebp+28]
  433. head_f_i__                equ [ebp+32]
  434. point_dir_name__          equ [ebp+36]
  435. adr_load_lib              equ dword [ebp+40]
  436. status_lib                equ dword [ebp+44]
  437.  
  438.         mov     ebp,_start
  439.         mov     ecx,((_end-_start)/ll_struc_size)
  440.  
  441. align 4
  442. lp:     push    ecx
  443.         mcall   68,19,system_path__   ; load of sys directory
  444.         test    eax,eax
  445.         jnz     end_steep
  446.  
  447.         copy_path  library_name__, cur_dir_path__, library_path__,point_dir_name__     ;the macros making way /current pach a program/+ name system library
  448.        
  449.         mcall   68,19,library_path__ ; load of alternative
  450.         test    eax,eax
  451.         jnz     end_steep
  452.  
  453.         or      status_lib,0x1          ; status of code - enable error - not found library
  454.  
  455.         show_error_window  err_message_found_lib__, head_f_l__,    ;show error message /create window
  456.         jmp      next
  457.  
  458. align 4
  459. end_steep:
  460.         mov     adr_load_lib,eax        ;save adr lib in memory
  461.         import_boxlib my_import, err_message_import__, head_f_i__  ;import
  462.  
  463.         test    eax,eax
  464.         jz      next
  465.  
  466.         or      status_lib,0x2          ; status of code - enable error - import error
  467.  
  468. next:
  469.         pop     ecx
  470.         add     ebp,ll_struc_size
  471.         dec     ecx
  472.         jnz     lp
  473.  
  474. ;----------------------------------
  475.         mov     ebp,_start
  476.         mov     ecx,((_end-_start)/ll_struc_size)
  477.  
  478. align 4
  479. lp2:
  480.         mov     eax,status_lib
  481.         test    eax,eax
  482.         jz      @f
  483.  
  484.         mcall   51,1,start__,end_tr            ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó
  485.         or      eax,-1
  486.         jmp     exit_lp2
  487.  
  488. @@:
  489.         add     ebp,ll_struc_size
  490.         dec     ecx
  491.         jnz     lp2
  492. exit_lp2:
  493. }
  494.  
  495. macro load_libraries _start,_end
  496. {
  497. local lp2
  498. local exit_lp2
  499. local lp
  500. local end_steep
  501. local next
  502. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  503. library_name__            equ [ebp]
  504. cur_dir_path__            equ [ebp+4]
  505. library_path__            equ [ebp+8]
  506. system_path__             equ [ebp+12]
  507. err_message_found_lib__   equ [ebp+16]  
  508. head_f_l__                equ [ebp+20]
  509. my_import                 equ [ebp+24]
  510. err_message_import__      equ [ebp+28]
  511. head_f_i__                equ [ebp+32]
  512. point_dir_name__          equ [ebp+36]
  513. adr_load_lib              equ dword [ebp+40]
  514. status_lib                equ dword [ebp+44]
  515.  
  516.         mov     ebp,_start
  517.         mov     ecx,((_end-_start)/ll_struc_size)
  518.  
  519. align 4
  520. lp:     push    ecx
  521.  
  522.         copy_path    library_name__, cur_dir_path__, library_path__,point_dir_name__   ;the macros making way /current pach a program/+ name system library
  523.  
  524.         mcall   68,19,library_path__  ; load of alternative
  525.         test    eax,eax
  526.         jnz     end_steep
  527.        
  528.         mcall   68,19,system_path__   ; load of sys directory
  529.         test    eax,eax
  530.         jnz     end_steep
  531.  
  532.         or      status_lib,0x1          ; status of code - enable error - not found library
  533.  
  534.         show_error_window  err_message_found_lib__, head_f_l__    ;show error message /create window
  535.         jmp      next
  536.  
  537. align 4
  538. end_steep:
  539.         mov     adr_load_lib,eax        ;save adr lib in memory
  540.  
  541.         import_boxlib my_import, err_message_import__, head_f_i__  ;import
  542.  
  543.         test    eax,eax
  544.         jz      next
  545.  
  546.         or      status_lib,0x2          ; status of code - enable error - import error
  547.  
  548. next:
  549.         pop     ecx
  550.         add     ebp,ll_struc_size
  551.         dec     ecx
  552.         jnz     lp
  553.  
  554. ;-----------------------------------------------
  555.         mov     ebp,_start
  556.         mov     ecx,((_end-_start)/ll_struc_size)
  557.  
  558. align 4
  559. lp2:
  560.         mov     eax,status_lib
  561.         test    eax,eax
  562.         jz      @f
  563.  
  564.         mcall   51,1,start__,end_tr            ; ñîçäàåì íîâûé ïîòîê ïî øàáëîíó
  565.         or      eax,-1
  566.         jmp     exit_lp2
  567.  
  568. @@:
  569.         add     ebp,ll_struc_size
  570.         dec     ecx
  571.         jnz     lp2
  572. exit_lp2:
  573.  
  574. }
  575.  
  576.  
  577. macro copy_path lib_name,dir_path,lib_path,point_dir_name
  578. {
  579.         pushad  ;save all registers
  580.         push    dword lib_name
  581.         push    dword dir_path
  582.         push    dword lib_path
  583.         push    dword point_dir_name
  584.         call    @copy_path
  585.  
  586.         add     esp,16
  587.         popad   ;restore all registers
  588. }
  589.  
  590. macro show_error_window  err_message, head
  591. {       pushad  ;save all registers
  592.         push    dword err_message
  593.         push    dword head
  594.  
  595.         call    show_err_
  596.  
  597.         add     esp,8
  598.         popad   ;restore all registers
  599.         or      eax,-1  ;óâû
  600. }
  601.  
  602.  
  603. ;âõîäíûå ïàðàìåòðû:
  604. ;eax - àäðåñ áèáëèîòåêè â ïàìÿòè
  605. ;myimport - èìïîðòèðóåìûå ôóíêöèè
  606. macro import_boxlib myimport, err_message_import__, head_f_i__
  607. {
  608. local import_loop
  609. local import_find
  610. local lp
  611. local import_find_next
  612. local import_found
  613. local import_done
  614. local exit
  615. local e.exit
  616. local import_not_found
  617. ; initialize import
  618.        
  619.         mov     edx, eax
  620.         mov     esi,myimport
  621. import_loop:
  622.         lodsd   ;mov eax,dword[esi] ;add esi,4 ;ïîëó÷àåì â eax óêàçàòåëü íà èìÿ èìïîðòèðóåìîé ôóíêöèè
  623.         test    eax, eax
  624.         jz      import_done ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â ïîëüçîâàòåëüñêîé ïðîãðàììå)
  625.         push    edx ;ñîõðàíÿåì íà÷àëî áèáëèîòå÷íûõ óêàçàòåëåé íà ôóíêöèè
  626. import_find:
  627.         mov     ebx, [ds:edx]
  628.         test    ebx, ebx
  629.         jz      import_not_found ;åñëè óêàçàòåëü íà èìÿ ôóíêöèè = 0 (â áèáëèîòåêå)
  630.         push    eax ;eax - óêàçàòåëü íà èìÿ ýêñïîðòèðóåìîé ôóíêöèè (â ïîëüçîâàòåëüñêîé ïðîãðàììå)
  631. lp:
  632.         mov     cl, [ds:eax]
  633.         cmp     cl, [ds:ebx] ;ñðàâíèâàåì èìåíà ôóíêöèé â áèáëèîòåêå è â ïîëüçîâàòåëüñêîé ïðîãðàììå
  634.         jnz     import_find_next ;åñëè íàçâàíèÿ íå ñîâïàëè
  635.         test    cl, cl
  636.         jz      import_found ;åñëè íàçâàíèÿ ñîâïàëè, è óæå êîíåö ñòðîêè (cl=0)
  637.         inc     eax
  638.         inc     ebx
  639.         jmp     lp
  640. import_find_next:
  641.         pop     eax
  642.         add     edx, 8 ;8 = 4 áàéòà óêàçàòåëü íà íàçâàíèå è 4 áàéòà óêàçàòåëü íà ôóíêöèþ
  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
  652.                 cmp dword[ebx],'lib_'
  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
  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
  665.                 mov     edx,library_fun_dll_load
  666.                 call dword esi
  667.                 popad
  668. end if
  669.         jmp     import_loop
  670. import_not_found:
  671.         add     esp,4
  672.         show_error_window  err_message_import__, head_f_i__    ;show error message /create window
  673.         jmp     e.exit
  674. import_done:
  675.         xor     eax,eax ;=0 âñå çàãðóçèëîñü óäà÷íî
  676. e.exit:
  677. ;---------------------------------------------------------------------
  678. }
  679. ll_struc_size = 48;($-library_name__)    ; constant   size of struct
  680. 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
  681. {        
  682. .library_name__           dd library_name__        ; èìÿ çàãðóæàåìîé áèáëèîòåêè
  683. .cur_dir_path__           dd cur_dir_path__        ; óêàçàòåëü íà áóôåð â êîòîðîì ñîäåðæèòüñÿ ïóòü îò êóäà áûëà çàïóùåíà ïðîãðàììà
  684.                        
  685. .library_path__           dd library_path__        ; óêàçàòåëü íà áóôåð â êîòîðîì áóäåò ñîôîðèìèðîâàí ïóòü ê áèáëèîòåêè, åñëè íóæíî âû÷èñëèòü ïóòü äî ëèáû ñ ìåñòà çàïóñêà ïðîãðàììû, îáû÷íî íóæíî, â ñëó÷àÿõ, åñëè ëèáà ðàñïîëîæåíà â òîé æå ïàïêå
  686. .complete_path            dd system_path__         ; ïóòü êîòîðûé ÷åòêî ñîäåðæèò ïóòü
  687.  
  688. .err_message_found_lib__  dd err_message_found_lib__
  689. .head_f_l__               dd head_f_l__
  690. .my_import                dd my_import
  691. .err_message_import__     dd err_message_import__
  692. .head_f_i__               dd head_f_i__
  693. if point_dir_name eq
  694. .point_dir_name__       dd 0x0
  695. else
  696. .point_dir_name__       dd point_dir_name          ; èìÿ âëîæåííîé äèððåêòîðèè â êòîðîé õðàíÿòüñÿ ïîäãðóæàåìûå ìîäóëè.
  697. end if
  698. .adr_load_lib           dd 0x0
  699. .status_lib             dd 0x0          ;status of load library
  700. ;
  701. }
  702.