Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; â ýòîì ôàéëå ñîáðàíû ôóíêöèè ñîçäàþùèå ïðîãðàìíûé êîä
  3. ;
  4. u_object object ;âðåìåííûé îáúåêò äëÿ çàäàíèÿ ñìåùåíèé
  5.  
  6. macro insert_coma
  7. {
  8.         stdcall [ted_text_add], tedit0,txt_coma,1,ted_opt_ed_move_cursor
  9. }
  10. macro insert_nl
  11. {
  12.         stdcall [ted_text_add], tedit0,txt_nl,1,ted_opt_ed_move_cursor
  13. }
  14. macro insert_com
  15. {
  16.         stdcall [ted_text_add], tedit0,txt_com,1,ted_opt_ed_move_cursor
  17. }
  18. macro insert_sp
  19. {
  20.         stdcall [ted_text_add], tedit0,txt_sp,1,ted_opt_ed_move_cursor
  21. }
  22.  
  23. ;ôóíêöèÿ âñòàâëÿåò òåêñòîâóþ ñòðîêó â òåêñòîâûé ðåäàêòîð
  24. align 4
  25. proc insert_text, txt:dword
  26.         push eax
  27.         stdcall str_len,dword[txt]
  28.         cmp eax,1
  29.         jl @f
  30.                 stdcall [ted_text_add], tedit0,dword[txt],eax,ted_opt_ed_move_cursor
  31.         @@:
  32.         pop eax
  33.         ret
  34. endp
  35.  
  36. ;âñòàâëÿåò óêàçàííîå ñâîéñòâî èç îáúåêòà â òåêñòîâûé ðåäàêòîð
  37. align 4
  38. proc insert_text_prop, p_obj:dword,index:dword
  39.         push eax edx
  40.                 mov eax,[p_obj]
  41.                 mov edx,[index]
  42.                 stdcall get_obj_text_col,eax,edx
  43.                 stdcall str_len,edx
  44.                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  45.         pop edx eax
  46.         ret
  47. endp
  48.  
  49. macro insert_tab
  50. {
  51.         stdcall [ted_text_add], tedit0,txt_tab,1,ted_opt_ed_move_cursor
  52. }
  53. macro insert_br
  54. {
  55.         stdcall [ted_text_add], tedit0,txt_br,3,ted_opt_ed_move_cursor
  56. }
  57. macro insert_a_met
  58. {
  59.         stdcall [ted_text_add], tedit0,txt_a_met,3,ted_opt_ed_move_cursor
  60. }
  61. macro insert_0
  62. {
  63.         stdcall [ted_text_add], tedit0,txt_0,1,ted_opt_ed_move_cursor
  64. }
  65. macro insert_plus
  66. {
  67.         stdcall [ted_text_add], tedit0,txt_plus,1,ted_opt_ed_move_cursor
  68. }
  69. macro insert_xor
  70. {
  71.         stdcall [ted_text_add], tedit0,txt_xor,4,ted_opt_ed_move_cursor
  72. }
  73. macro insert_cmp
  74. {
  75.         stdcall [ted_text_add], tedit0,txt_cmp,4,ted_opt_ed_move_cursor
  76. }
  77. macro insert_reg reg_name
  78. {
  79.         stdcall [ted_text_add], tedit0,reg_name,3,ted_opt_ed_move_cursor
  80. }
  81. macro insert_reg8 reg_name
  82. {
  83.         stdcall [ted_text_add], tedit0,reg_name,2,ted_opt_ed_move_cursor
  84. }
  85. macro insert_i65p
  86. {
  87.         stdcall [ted_text_add], tedit0,txt_i65p,7,ted_opt_ed_move_cursor
  88. }
  89.  
  90.  
  91. ;
  92. macro insert_but_beg
  93. {
  94.         stdcall [ted_text_add], tedit0,txt_but_1,txt_but_2-txt_but_1,ted_opt_ed_move_cursor
  95. }
  96. macro insert_but_end
  97. {
  98.         stdcall [ted_text_add], tedit0,txt_but_2,txt_but_3-txt_but_2,ted_opt_ed_move_cursor
  99. }
  100. ;
  101. macro insert_key_beg
  102. {
  103.         stdcall [ted_text_add], tedit0,txt_key_1,txt_key_2-txt_key_1,ted_opt_ed_move_cursor
  104. }
  105. macro insert_key_end
  106. {
  107.         stdcall [ted_text_add], tedit0,txt_key_2,txt_key_3-txt_key_2,ted_opt_ed_move_cursor
  108. }
  109.  
  110. macro insert_d_poi
  111. {
  112.         stdcall [ted_text_add], tedit0,txt_d_poi,1,ted_opt_ed_move_cursor
  113. }
  114. macro insert_ret
  115. {
  116.         stdcall [ted_text_add], tedit0,txt_ret,4,ted_opt_ed_move_cursor
  117. }
  118.  
  119.  
  120. align 4
  121. but_code_gen:
  122.         call code_gen
  123.         cmp byte[show_mode],1 ;óñëîâèå âèäèìîñòè òåêñòîâîãî îêíà
  124.         jne @f
  125.                 stdcall [ted_draw], tedit0
  126.         @@:
  127.         ret
  128.  
  129. ;ôóíêöèÿ ñîçäàþùàÿ êîä âñåãî ôàéëà
  130. align 4
  131. code_gen:
  132.         stdcall [ted_clear], tedit0,1
  133. pushad
  134.         stdcall dword[tl_node_poi_get_info], 0,tree2
  135.         pop esi
  136.         xor bl,bl
  137.         call code_gen_obj
  138.         stdcall [ted_text_add], tedit0,\
  139.                 txt_nl,1,ted_opt_ed_move_cursor+ted_opt_ed_change_time ;äîáàâëÿåì ñèìâîë íîâîé ñòðîêè ñ îïöèåé ted_opt_ed_change_time äëÿ âîçìîæíîñòè ñîõðàíåíèÿ ôàéëà
  140.         stdcall [ted_init_scroll_bars], tedit0, 4 ;ìåíÿåì ðàçìåðû ñêðîëëèíãîâ
  141. popad
  142.         ret
  143.  
  144. ;input:
  145. ; bl - óðîâåíü îáúåêòà
  146. ; esi - óêàçàòåëü íà óçåë
  147. align 4
  148. code_gen_obj:
  149. push ebx
  150.         .beg_iterat:
  151.                 cmp esi,0
  152.                 je .find_no
  153.  
  154.                 cmp byte[esi+2],bl ;lev
  155.                 jl .find_no
  156.  
  157.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  158.                 pop eax ;ïîëó÷àåì äàííûå óçëà
  159.                 cmp eax,0
  160.                 je .find_no
  161.  
  162.                 cmp byte[eax],C_ST
  163.                 jne @f
  164.                         stdcall get_code_struct,eax ;îáðàáîòêà îáúåêòà
  165.                         stdcall dword[tl_node_poi_get_next_info], esi,tree2
  166.                         pop ecx ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  167.                         cmp ecx,0
  168.                         je .find_no
  169.                         cmp byte[ecx+2],bl ;lev
  170.                         jle .end_st
  171.                                 mov esi,ecx
  172.                                 push bx
  173.                                         mov bl,byte[esi+2]
  174.                                         call code_gen_obj ;ðåêóðñèâíûé âûçîâ äî÷åðíèõ îáúåêòîâ
  175.                                 pop bx
  176.                         .end_st:
  177.                         stdcall [ted_text_add], tedit0,txt_ends,6,ted_opt_ed_move_cursor
  178.                         jmp .beg_iterat
  179.                 @@:
  180.                 cmp byte[eax],C_TT
  181.                 jne @f
  182.                         stdcall get_code_text,eax ;îáðàáîòêà îáúåêòà
  183.                 @@:
  184.                 cmp byte[eax],C_IN
  185.                 jne @f
  186.                         stdcall get_code_incl,eax ;îáðàáîòêà îáúåêòà
  187.                 @@:
  188.                 cmp byte[eax],C_CO
  189.                 jne @f
  190.                         stdcall get_code_comment,eax ;îáðàáîòêà îáúåêòà
  191.                 @@:
  192.                 cmp byte[eax],C_VR
  193.                 jne @f
  194.                         stdcall get_code_variable,eax,ebx ;îáðàáîòêà îáúåêòà
  195.                 @@:
  196.                 cmp byte[eax],C_WI
  197.                 jne @f
  198.                         stdcall get_code_window,eax ;îáðàáîòêà îáúåêòà
  199.                 @@:
  200.                 cmp byte[eax],C_AC
  201.                 jne @f
  202.                         stdcall get_code_auto,eax ;îáðàáîòêà îáúåêòà
  203.                 @@:
  204.                 cmp byte[eax],C_KE ;êëàâèàòóðà
  205.                 jne @f
  206.                         stdcall get_code_key,eax ;îáðàáîòêà îáúåêòà
  207.                 @@:
  208.  
  209.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  210.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  211.  
  212.                 jmp .beg_iterat
  213.         .find_no:
  214. pop ebx
  215.         ret
  216.  
  217.  
  218. align 4
  219. proc get_code_text, p_obj:dword
  220.         pushad
  221.                 insert_nl
  222.                 mov ebx,dword[p_obj]
  223.                 stdcall get_obj_text_col,ebx,0
  224.                 stdcall str_len,edx
  225.                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  226.                 insert_nl
  227.         popad
  228.         ret
  229. endp
  230.  
  231. ;îáðàáîòêà îáúåêòà ñîçäàþùåãî àâòîìàòè÷åêñèå êîäû
  232. align 4
  233. proc get_code_auto, p_obj:dword
  234.         pushad
  235.                 insert_nl
  236.                 mov ebx,dword[p_obj]
  237.                 mov ecx,dword[ebx+u_object.modif-u_object]
  238.                 bt ecx,BIT_MOD_ACM
  239.                 jae @f
  240.                         ;àâòîìàòè÷åñêèå ñîáûòèÿ îò ìûøè
  241.                         call get_code_auto_m
  242.                 @@:
  243.                 bt ecx,BIT_MOD_ABU
  244.                 jae @f
  245.                         ;ñîçäàíèå ôóíêöèè button
  246.                         insert_but_beg
  247.                         call get_code_auto_but ;êîäû âûçîâà êíîïîê
  248.                         insert_but_end
  249.                         call get_code_a_but_fun ;êîäû ôóíêöèé, âûçûâàåìûõ ïðè íàæàòèè êíîïîê
  250.                 @@:
  251.                 bt ecx,BIT_MOD_ACD
  252.                 jae @f
  253.                         call get_code_auto_data_el
  254.                         call get_code_auto_data_dop
  255.  
  256.                         xor edx,edx
  257.                         mov dl,C_LIB
  258.                         stdcall find_obj_in_file,edx ;eax - óêàçàòåëü íà ñòðóêòóðó áèáëèîòåêè
  259.                         cmp eax,0
  260.                         je @f
  261.                                 stdcall insert_text, txt_head_i
  262.                                 stdcall insert_text, txt_d_poi
  263.                                 insert_nl
  264.                                 stdcall insert_text, txt_head_l
  265.                                 stdcall insert_text, txt_db
  266.                                 stdcall insert_text, txt_str_beg
  267.                                 stdcall insert_text, txt_sys_err
  268.                                 stdcall insert_text, txt_str_end
  269.                                 insert_nl
  270.  
  271.                                 call get_code_auto_data_libs_param
  272.                                 stdcall insert_text, txt_ll_start
  273.                                         call get_code_auto_data_libs_struc
  274.                                 stdcall insert_text, txt_ll_end
  275.                                 call get_code_auto_data_libs ;òàáëèöû èìïîðòà áèáëèîòåê
  276.                 @@:
  277.                 insert_nl
  278.         popad
  279.         ret
  280. endp
  281.  
  282.  
  283. align 4
  284. proc get_code_auto_m
  285.         pushad
  286.         stdcall dword[tl_node_poi_get_info], 0,tree2
  287.         pop esi
  288.         .beg_iterat:
  289.                 cmp esi,0
  290.                 je .find_no
  291.  
  292.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  293.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  294.                 cmp ebx,0
  295.                 je .find_no
  296.  
  297.                 cmp byte[ebx],C_ED
  298.                 jne @f
  299.                         stdcall insert_text, txt_std_mouse_ed
  300.                         ;insert_sp
  301.                         stdcall get_obj_text_col,ebx,0
  302.                         stdcall str_len,edx
  303.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  304.                         insert_nl
  305.                 @@:
  306.                 cmp byte[ebx],C_CB
  307.                 jne @f
  308.                         stdcall insert_text, txt_std_mouse_cb
  309.                         ;insert_sp
  310.                         stdcall get_obj_text_col,ebx,0
  311.                         stdcall str_len,edx
  312.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  313.                         insert_nl
  314.                 @@:
  315.  
  316.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  317.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  318.  
  319.                 jmp .beg_iterat
  320.         .find_no:
  321.         popad
  322.         ret
  323. endp
  324.  
  325. ;ñîçäàíèå äàííûõ (ñòðóêòóð îáúåêòîâ)
  326. align 4
  327. proc get_code_auto_data_el
  328.         pushad
  329.         insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  330.  
  331.         stdcall dword[tl_node_poi_get_info], 0,tree2
  332.         pop esi
  333.         .beg_iterat:
  334.                 cmp esi,0
  335.                 je .find_no
  336.  
  337.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  338.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  339.                 cmp ebx,0
  340.                 je .find_no
  341.  
  342.                 cmp byte[ebx],C_ED
  343.                 jne @f
  344.                         ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
  345.                         stdcall insert_text_prop, ebx,0
  346.                         stdcall insert_text, txt_ebox
  347.  
  348.                         mov ecx,1
  349.                         .prop:
  350.                                 insert_sp
  351.                                 stdcall insert_text_prop, ebx,ecx
  352.                                 insert_coma
  353.                                 inc ecx
  354.                                 cmp ecx,10
  355.                         jl .prop
  356.  
  357.                         insert_br
  358.                         stdcall insert_text, txt_txt
  359.  
  360.                         mov edx,fp_icon
  361.                         stdcall get_obj_id, ebx,edx
  362.                         stdcall insert_text,edx
  363.  
  364.                         stdcall insert_text, txt_mouse_dd
  365.                         insert_nl
  366.                 @@:
  367.                 ;cmp byte[ebx],C_CB
  368.                 ;jne @f
  369.                 ;@@:
  370.  
  371.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  372.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  373.  
  374.                 jmp .beg_iterat
  375.         .find_no:
  376.         popad
  377.         ret
  378. endp
  379.  
  380. ;äàííûå äëÿ áèáëèîòåê
  381. align 4
  382. proc get_code_auto_data_libs_param
  383.         pushad
  384.         insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  385.  
  386.         stdcall dword[tl_node_poi_get_info], 0,tree2
  387.         pop esi
  388.         .beg_iterat:
  389.                 cmp esi,0
  390.                 je .find_no
  391.  
  392.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  393.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  394.                 cmp ebx,0
  395.                 je .find_no
  396.  
  397.                 cmp byte[ebx],C_LIB
  398.                 jne @f
  399.                         ;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
  400.  
  401.                         stdcall insert_text, txt_sys_dir
  402.                         ;object code
  403.                         mov edx,fp_icon
  404.                         stdcall get_obj_id, ebx,edx
  405.                         stdcall insert_text,edx
  406.                         stdcall insert_text,txt_db
  407.                         ;stdcall insert_text, txt_str_beg
  408.                         stdcall insert_text_prop, ebx,1
  409.                         ;stdcall insert_text, txt_str_end
  410.                         insert_nl
  411.  
  412.                         stdcall insert_text, txt_lib_name
  413.                         stdcall insert_text,edx
  414.                         stdcall insert_text,txt_db
  415.                         stdcall insert_text, txt_str_beg
  416.                         stdcall insert_text_prop, ebx,0
  417.                         stdcall insert_text, txt_str_end
  418.                         insert_nl
  419.  
  420.                         stdcall insert_text,txt_err_m_f_lib
  421.                         stdcall insert_text,edx
  422.                         stdcall insert_text,txt_db
  423.                         stdcall insert_text, txt_str_beg
  424.                         stdcall insert_text_prop, ebx,4
  425.                         stdcall insert_text, txt_str_end
  426.                         insert_nl
  427.  
  428.                         stdcall insert_text,txt_err_m_i_lib
  429.                         stdcall insert_text,edx
  430.                         stdcall insert_text,txt_db
  431.                         stdcall insert_text, txt_str_beg
  432.                         stdcall insert_text_prop, ebx,5
  433.                         stdcall insert_text, txt_str_end
  434.                         insert_nl
  435.  
  436.                         insert_nl
  437.                 @@:
  438.  
  439.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  440.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  441.  
  442.                 jmp .beg_iterat
  443.         .find_no:
  444.         popad
  445.         ret
  446. endp
  447.  
  448. ;äàííûå äëÿ áèáëèîòåê
  449. align 4
  450. proc get_code_auto_data_libs_struc
  451.         pushad
  452.         ;insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  453.  
  454.         stdcall dword[tl_node_poi_get_info], 0,tree2
  455.         pop esi
  456.         .beg_iterat:
  457.                 cmp esi,0
  458.                 je .find_no
  459.  
  460.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  461.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  462.                 cmp ebx,0
  463.                 je .find_no
  464.  
  465.                 cmp byte[ebx],C_LIB
  466.                 jne @f
  467.                         ;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
  468.  
  469.                         stdcall insert_text, txt_lib
  470.                         ;object code
  471.                         mov edx,fp_icon
  472.                         stdcall get_obj_id, ebx,edx
  473.                         stdcall insert_text,edx
  474.                         insert_sp
  475.                         stdcall insert_text, txt_ll
  476.                         stdcall insert_text, txt_lib_name
  477.                         stdcall insert_text,edx
  478.                         stdcall insert_text,txt_coma
  479.  
  480.                         stdcall insert_text, txt_lib_path
  481.  
  482.                         stdcall insert_text, txt_sys_dir
  483.                         stdcall insert_text,edx
  484.                         stdcall insert_text,txt_coma
  485.                         stdcall insert_text,txt_br
  486.                         stdcall insert_text,txt_tab
  487.  
  488.                         stdcall insert_text,txt_err_m_f_lib
  489.                         stdcall insert_text,edx
  490.                         stdcall insert_text,txt_coma
  491.                         stdcall insert_text,txt_head_l
  492.                         stdcall insert_text,txt_coma
  493.  
  494.                         stdcall insert_text_prop, ebx,2
  495.                         stdcall insert_text,txt_coma
  496.  
  497.                         stdcall insert_text,txt_err_m_i_lib
  498.                         stdcall insert_text,edx
  499.                         stdcall insert_text,txt_coma
  500.                         stdcall insert_text,txt_head_i
  501.  
  502.                         insert_nl
  503.                 @@:
  504.  
  505.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  506.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  507.  
  508.                 jmp .beg_iterat
  509.         .find_no:
  510.         popad
  511.         ret
  512. endp
  513.  
  514. ;äàííûå äëÿ áèáëèîòåê
  515. align 4
  516. proc get_code_auto_data_libs
  517.         pushad
  518.         insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  519.  
  520.         stdcall dword[tl_node_poi_get_info], 0,tree2
  521.         pop esi
  522.         .beg_iterat:
  523.                 cmp esi,0
  524.                 je .find_no
  525.  
  526.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  527.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  528.                 cmp ebx,0
  529.                 je .find_no
  530.  
  531.                 cmp byte[ebx],C_LIB
  532.                 jne @f
  533.                         ;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
  534.                         stdcall insert_text, txt_align_4
  535.                         stdcall insert_text_prop, ebx,2
  536.                         stdcall insert_text, txt_d_poi
  537.                         insert_nl
  538.  
  539.                         call get_code_lib_table
  540.                 @@:
  541.  
  542.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  543.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  544.  
  545.                 jmp .beg_iterat
  546.         .find_no:
  547.         popad
  548.         ret
  549. endp
  550.  
  551. ;input:
  552. ; esi
  553. align 4
  554. get_code_lib_table:
  555. pushad
  556.         mov bl,byte[esi+2]
  557.         mov edi,esi
  558.         stdcall dword[tl_node_poi_get_data], esi,tree2
  559.         pop edx ;ïîëó÷åíèå äàííûõ ðîäèòåëüñêîãî îáúåêòà
  560.         cmp edx,0
  561.         je @f
  562.         @@:
  563.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  564.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  565.                 cmp esi,0
  566.                 je @f
  567.                 cmp byte[esi+2],bl ;lev
  568.                 jle @f
  569.                         stdcall dword[tl_node_poi_get_data], esi,tree2
  570.                         pop ecx ;ïîëó÷àåì äàííûå óçëà
  571.                         cmp ecx,0
  572.                         je @f
  573.                         cmp byte[ecx],C_IFN
  574.                         jne @b
  575.                                 ;âñòàâêà óêàçàòåëÿ íà ôóíêöèþ
  576.                                 insert_tab
  577.                                 stdcall insert_text_prop, ecx,0
  578.                                 stdcall insert_text, txt_dd
  579.                                 stdcall insert_text_prop, edx,3 ;ïðèñòàâêà ê ôóíêöèè
  580.                                 stdcall insert_text_prop, ecx,0
  581.                                 insert_nl
  582.                         jmp @b
  583.         @@:
  584.         stdcall insert_text, txt_dd_0_0
  585.         mov esi,edi
  586.         @@:
  587.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  588.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  589.                 cmp esi,0
  590.                 je @f
  591.                 cmp byte[esi+2],bl ;lev
  592.                 jle @f
  593.                         stdcall dword[tl_node_poi_get_data], esi,tree2
  594.                         pop ecx ;ïîëó÷àåì äàííûå óçëà
  595.                         cmp ecx,0
  596.                         je @f
  597.                         cmp byte[ecx],C_IFN
  598.                         jne @b
  599.                                 ;âñòàâêà èìåíè èìïîðòèðîâàííîé ôóíêöèè
  600.                                 insert_tab
  601.                                 stdcall insert_text_prop, edx,3 ;ïðèñòàâêà ê ôóíêöèè
  602.                                 stdcall insert_text_prop, ecx,0
  603.                                 stdcall insert_text, txt_db
  604.                                 stdcall insert_text, txt_str_beg
  605.                                 stdcall insert_text_prop, ecx,1
  606.                                 stdcall insert_text, txt_str_end
  607.                                 insert_nl
  608.                         jmp @b
  609.         @@:
  610. popad
  611.         ret
  612.  
  613. ;
  614. align 4
  615. proc get_code_auto_data_dop
  616.         pushad
  617.         insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  618.  
  619.         stdcall dword[tl_node_poi_get_info], 0,tree2
  620.         pop esi
  621.         .beg_iterat:
  622.                 cmp esi,0
  623.                 je .find_no
  624.  
  625.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  626.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  627.                 cmp ebx,0
  628.                 je .find_no
  629.  
  630.                 cmp byte[ebx],C_ED
  631.                 jne @f
  632.                         ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
  633.                         stdcall insert_text, txt_txt
  634.  
  635.                         mov edx,fp_icon
  636.                         stdcall get_obj_id, ebx,edx
  637.                         stdcall str_len,edx ;eax = len(fp_icon)
  638.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  639.                         stdcall insert_text, txt_times
  640.  
  641.                         stdcall get_obj_text_col,ebx,9
  642.                         stdcall str_len,edx
  643.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  644.  
  645.                         insert_plus
  646.                         stdcall insert_text, txt_2
  647.                         stdcall insert_text, txt_db
  648.                         insert_0
  649.                         insert_nl
  650.                 @@:
  651.                 ;cmp byte[ebx],C_CB
  652.                 ;jne @f
  653.                 ;@@:
  654.  
  655.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  656.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  657.  
  658.                 jmp .beg_iterat
  659.         .find_no:
  660.         popad
  661.         ret
  662. endp
  663.  
  664. ;ñâÿçûâàåì êíîïêè ñ ôóíêöèÿìè
  665. align 4
  666. proc get_code_auto_but
  667.         pushad
  668.         stdcall dword[tl_node_poi_get_info], 0,tree2
  669.         pop esi
  670.         .beg_iterat:
  671.                 cmp esi,0
  672.                 je .find_no
  673.  
  674.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  675.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  676.                 cmp ebx,0
  677.                 je .find_no
  678.  
  679.                 cmp byte[ebx],C_BU
  680.                 jne @f
  681.                         insert_tab
  682.                         insert_cmp
  683.                         insert_reg8 txt_ah
  684.                         insert_coma
  685.                         stdcall get_obj_text_col,ebx,0
  686.                         stdcall str_len,edx
  687.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  688.                         insert_nl
  689.                         insert_tab
  690.                         stdcall insert_text, txt_jne_f
  691.                         insert_nl
  692.                         insert_tab
  693.                         insert_tab
  694.                         stdcall insert_text, txt_call
  695.                         stdcall get_obj_text_col,ebx,6
  696.                         stdcall str_len,edx
  697.                         cmp eax,1
  698.                         jl .c_fun
  699.                                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  700.                         .c_fun:
  701.                         insert_nl
  702.                         insert_tab
  703.                         insert_a_met ;@@:
  704.                         insert_nl
  705.                 @@:
  706.  
  707.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  708.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  709.  
  710.                 jmp .beg_iterat
  711.         .find_no:
  712.         popad
  713.         ret
  714. endp
  715.  
  716. ;áåðåì êîäû äëÿ ôóíêöèé íàæàòèé íà êíîïêè
  717. align 4
  718. proc get_code_a_but_fun
  719.         pushad
  720.         stdcall dword[tl_node_poi_get_info], 0,tree2
  721.         pop esi
  722.         .beg_iterat:
  723.                 cmp esi,0
  724.                 je .find_no
  725.  
  726.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  727.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  728.                 cmp ebx,0
  729.                 je .find_no
  730.  
  731.                 cmp byte[ebx],C_BU
  732.                 jne @f
  733.                         stdcall get_obj_text_col,ebx,6
  734.                         stdcall str_len,edx
  735.                         cmp eax,1
  736.                         jl .c_fun
  737.                                 insert_nl
  738.                                 stdcall insert_text, txt_align_4
  739.                                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  740.                                 insert_d_poi
  741.                                 insert_nl
  742.                                 insert_tab
  743.                                 insert_ret
  744.                         .c_fun:
  745.                 @@:
  746.  
  747.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  748.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  749.  
  750.                 jmp .beg_iterat
  751.         .find_no:
  752.         popad
  753.         ret
  754. endp
  755.  
  756. align 4
  757. proc get_code_key, p_obj:dword
  758.         pushad
  759.                 insert_nl
  760.                 mov ebx,dword[p_obj]
  761.  
  762.                 insert_key_beg
  763.                 call get_code_funct_key ;êîäû âûçîâà êíîïîê
  764.                 insert_key_end
  765.  
  766.                 insert_nl
  767.         popad
  768.         ret
  769. endp
  770.  
  771. align 4
  772. proc get_code_funct_key
  773.         pushad
  774.         stdcall dword[tl_node_poi_get_info], 0,tree2
  775.         pop esi
  776.         .beg_iterat:
  777.                 cmp esi,0
  778.                 je .find_no
  779.  
  780.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  781.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  782.                 cmp ebx,0
  783.                 je .find_no
  784.  
  785.                 cmp byte[ebx],C_ED
  786.                 jne @f
  787.                         stdcall insert_text, txt_std_key_ed
  788.                         stdcall insert_text_prop,ebx,0
  789.                         insert_nl
  790.                 @@:
  791.  
  792.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  793.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  794.  
  795.                 jmp .beg_iterat
  796.         .find_no:
  797.         popad
  798.         ret
  799. endp
  800.  
  801. ;îáúåêòû ïîäêëþ÷åíèÿ ôàéëîâ 'include ...'
  802. align 4
  803. proc get_code_incl, p_obj:dword
  804.         pushad
  805.                 stdcall insert_text, txt_incl
  806.                 mov ebx,dword[p_obj]
  807.                 stdcall insert_text_prop,ebx,0
  808.  
  809.                 stdcall get_obj_text_col,ebx,1
  810.                 stdcall str_len,edx
  811.                 cmp eax,1
  812.                 jl @f
  813.                         insert_sp
  814.                         insert_com
  815.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  816.                 @@:
  817.  
  818.                 insert_nl
  819.         popad
  820.         ret
  821. endp
  822.  
  823. align 4
  824. proc get_code_comment, p_obj:dword
  825.         insert_com
  826.         stdcall insert_text_prop, dword[p_obj],0
  827.         insert_nl
  828.         ret
  829. endp
  830.  
  831. ;ñîçäàåì êîä çàäàíèÿ îêíà
  832. align 4
  833. proc get_code_window, p_obj:dword
  834.         pushad
  835.                 mov ebx,dword[p_obj]
  836.                 ;2,3,4,5,6 - x,y,w,h,col_bkg
  837.  
  838.                 stdcall insert_text, txt_draw_wb
  839.  
  840.                 insert_tab
  841.                 insert_xor
  842.                 insert_reg txt_eax
  843.                 insert_coma
  844.                 insert_reg txt_eax
  845.                 insert_nl
  846.  
  847.                 ;mov ebx,...
  848.                 insert_tab
  849.                 stdcall insert_text, txt_mov
  850.                 insert_reg txt_ebx
  851.                 insert_coma
  852.                 stdcall insert_text_prop, ebx,2
  853.                 insert_i65p
  854.                 stdcall insert_text_prop, ebx,4
  855.                 insert_nl
  856.  
  857.                 ;mov ecx,...
  858.                 insert_tab
  859.                 stdcall insert_text, txt_mov
  860.                 insert_reg txt_ecx
  861.                 insert_coma
  862.                 stdcall insert_text_prop, ebx,3
  863.                 insert_i65p
  864.                 stdcall insert_text_prop, ebx,5
  865.                 insert_nl
  866.  
  867.                 ;mov edx,...
  868.                 insert_tab
  869.                 stdcall insert_text, txt_mov
  870.                 insert_reg txt_edx
  871.                 insert_coma
  872.                 stdcall insert_text_prop, ebx,6
  873.                 insert_nl
  874.  
  875.                 ;or edx,0x33000000
  876.                 insert_tab
  877.                 stdcall insert_text, txt_or
  878.                 insert_reg txt_edx
  879.                 insert_coma
  880.                 stdcall insert_text, txt_0x33000000
  881.                 insert_nl
  882.  
  883.                 ;mov edi,...
  884.                 insert_tab
  885.                 stdcall insert_text, txt_mov
  886.                 insert_reg txt_edi
  887.                 insert_coma
  888.                 stdcall insert_text_prop, ebx,0
  889.                 insert_nl
  890.  
  891.                 insert_tab
  892.                 stdcall insert_text, txt_i_40
  893.                 insert_nl
  894.  
  895.                 call get_code_draw_obj
  896.  
  897.                 stdcall insert_text, txt_draw_we ;êîä çàâåðøàþùèé ôóíêöèþ ðèñîâàíèÿ
  898.         popad
  899.         ret
  900. endp
  901.  
  902.  
  903. ;ôîðìèðóåì âûçîâ ôóíêöèé äëÿ ðèñîâàíèÿ îáúåêòîâ
  904. align 4
  905. proc get_code_draw_obj
  906.         pushad
  907.         stdcall dword[tl_node_poi_get_info], 0,tree2
  908.         pop esi
  909.         .beg_iterat:
  910.                 cmp esi,0
  911.                 je .find_no
  912.  
  913.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  914.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  915.                 cmp ebx,0
  916.                 je .find_no
  917.  
  918.                 cmp byte[ebx],C_ED
  919.                 jne @f
  920.                         stdcall insert_text, txt_editb_draw
  921.                         stdcall insert_text_prop, ebx,0
  922.                         insert_nl
  923.                 @@:
  924.                 cmp byte[ebx],C_CB
  925.                 jne @f
  926.                         stdcall insert_text, txt_cbox_draw
  927.                         stdcall insert_text_prop, ebx,0
  928.                         insert_nl
  929.                 @@:
  930.                 cmp byte[ebx],C_BU
  931.                 jne @f
  932.                         insert_tab
  933.                         stdcall insert_text, txt_mov
  934.                         insert_reg txt_eax
  935.                         insert_coma
  936.                         stdcall insert_text, txt_8
  937.                         insert_nl
  938.  
  939.                         insert_tab
  940.                         stdcall insert_text, txt_mov
  941.                         insert_reg txt_ebx
  942.                         insert_coma
  943.                         stdcall insert_text_prop, ebx,1
  944.                         insert_i65p
  945.                         stdcall insert_text_prop, ebx,3
  946.                         insert_nl
  947.  
  948.                         insert_tab
  949.                         stdcall insert_text, txt_mov
  950.                         insert_reg txt_ecx
  951.                         insert_coma
  952.                         stdcall insert_text_prop, ebx,2
  953.                         insert_i65p
  954.                         stdcall insert_text_prop, ebx,4
  955.                         insert_nl
  956.  
  957.                         insert_tab
  958.                         stdcall insert_text, txt_mov
  959.                         insert_reg txt_edx
  960.                         insert_coma
  961.                         stdcall insert_text_prop, ebx,0
  962.                         insert_nl
  963.  
  964.                         insert_tab
  965.                         stdcall insert_text, txt_or
  966.                         insert_reg txt_edx
  967.                         insert_coma
  968.                         stdcall insert_text, txt_but_create
  969.                         insert_nl
  970.  
  971.                         insert_tab
  972.                         stdcall insert_text, txt_mov
  973.                         insert_reg txt_esi
  974.                         insert_coma
  975.                         stdcall insert_text_prop, ebx,5 ;button color
  976.                         insert_nl
  977.  
  978.                         insert_tab
  979.                         stdcall insert_text, txt_i_40
  980.                         insert_nl
  981.                 @@:
  982.                 cmp byte[ebx],C_RE
  983.                 jne @f
  984.                         insert_tab
  985.                         stdcall insert_text, txt_mov
  986.                         insert_reg txt_eax
  987.                         insert_coma
  988.                         stdcall insert_text, txt_1
  989.                         stdcall insert_text, txt_3
  990.                         insert_nl
  991.  
  992.                         insert_tab
  993.                         stdcall insert_text, txt_mov
  994.                         insert_reg txt_ebx
  995.                         insert_coma
  996.                         stdcall insert_text_prop, ebx,1
  997.                         insert_i65p
  998.                         stdcall insert_text_prop, ebx,3
  999.                         insert_nl
  1000.  
  1001.                         insert_tab
  1002.                         stdcall insert_text, txt_mov
  1003.                         insert_reg txt_ecx
  1004.                         insert_coma
  1005.                         stdcall insert_text_prop, ebx,2
  1006.                         insert_i65p
  1007.                         stdcall insert_text_prop, ebx,4
  1008.                         insert_nl
  1009.  
  1010.                         insert_tab
  1011.                         stdcall insert_text, txt_mov
  1012.                         insert_reg txt_edx
  1013.                         insert_coma
  1014.                         stdcall insert_text_prop, ebx,0 ;rect color
  1015.                         insert_nl
  1016.  
  1017.                         insert_tab
  1018.                         stdcall insert_text, txt_i_40
  1019.                         insert_nl
  1020.                 @@:
  1021.  
  1022.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  1023.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  1024.  
  1025.                 jmp .beg_iterat
  1026.         .find_no:
  1027.         popad
  1028.         ret
  1029. endp
  1030.  
  1031.  
  1032.  
  1033. align 4
  1034. proc get_code_struct, p_obj:dword
  1035.         pushad
  1036.                 mov ebx,dword[p_obj]
  1037.                 ;0 - name
  1038.  
  1039.                 stdcall [ted_text_add], tedit0,txt_struct,7,ted_opt_ed_move_cursor
  1040.                 stdcall insert_text_prop, ebx,0
  1041.                 insert_nl
  1042.  
  1043.         popad
  1044.         ret
  1045. endp
  1046.  
  1047. ;ñîçäàòü êîä îáúÿâëåíèÿ ïåðåìåííîé
  1048. align 4
  1049. proc get_code_variable, p_obj:dword,o_lev:dword
  1050.         pushad
  1051.                 mov ebx,dword[p_obj]
  1052.                 ;0,1,2 - name,value,comment
  1053.  
  1054.                 mov ecx,dword[o_lev]
  1055.                 cmp cl,0
  1056.                 je .no_tab ;èçáåãàåì çàöèêëèâàíèÿ (0-1 = 2^32-1)
  1057.                 and cx,0xff
  1058.                 cld
  1059.                 @@:
  1060.                         insert_tab ;ôîðìèðîâàíèå îòñòóïà ïåðåä ïåðåìåííîé
  1061.                 loop @b
  1062.                 .no_tab:
  1063.  
  1064.                 stdcall insert_text_prop, ebx,0 ;èìÿ ïåðåìåííîé
  1065.                 insert_sp
  1066.  
  1067.                 mov ecx,dword[ebx+u_object.typid-u_object] ;ecx - îòíîñèòåëüíûé èíäåêñ ðîäèòåëüñêîãî îáúåêòà (â ïàìÿòè)
  1068.                 xor eax,eax
  1069.                 mov ax,[tree2.info_size]
  1070.                 imul ecx,eax ;óìíîæàåì èíäåêñ íà ðàçìåð ñòðóêòóðû
  1071.                 add ecx,[tree2.data_info] ;ecx - óêàçàòåëü äàííûå ðîäèòåëüñêîãî óçëà
  1072.  
  1073.                 ;ïðîâåðêó íà ïðàâèëüíîñòü ecx ???
  1074.  
  1075.                 stdcall insert_text_prop, ecx,0 ;òèï ïåðåìåííîé
  1076.                 insert_sp
  1077.                 stdcall insert_text_prop, ebx,1 ;çíà÷åíèå
  1078.  
  1079.                 stdcall get_obj_text_col,ebx,2 ;êîììåíòàðèé
  1080.                 stdcall str_len,edx
  1081.                 cmp eax,1
  1082.                 jl @f
  1083.                         insert_sp
  1084.                         insert_com
  1085.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  1086.                 @@:
  1087.                 insert_nl
  1088.  
  1089.         popad
  1090.         ret
  1091. endp
  1092.  
  1093.  
  1094.  
  1095. ;--- òåêñòîâûå êîíñòàíòû ---
  1096. txt_str_beg db 39,0
  1097. txt_str_end db 39,',0',0
  1098. txt_coma db ',',0
  1099. txt_i_40 db 'int 0x40',13,0
  1100. txt_0 db '0',0
  1101. txt_1 db '1',0
  1102. txt_2 db '2',0
  1103. txt_3 db '3',0
  1104. txt_4 db '4',0
  1105. txt_8 db '8',0
  1106. txt_plus db '+',0
  1107. txt_nl db 13,0
  1108. txt_com db ';',0
  1109. txt_sp db ' ',0
  1110. txt_tab db 9,0
  1111. txt_br db '\',13,9,0
  1112. txt_txt db 'txt_',0
  1113. txt_db db ' db ',0
  1114. txt_dd db ' dd ',0
  1115. txt_dd_0_0 db 9,'dd 0,0',13,0
  1116. txt_mouse_dd db ', mouse_dd, ',0
  1117. txt_times db ':',13,9,'times ',0
  1118. txt_draw_wb:
  1119.         db 13,'align 4',13,'draw_window:',13,'pushad',13,9,'mcall 12,1',13,0
  1120. txt_draw_we:
  1121.         db 9,'mcall 12,2',13,'popad',13,9,'ret',13,0
  1122. txt_sys_dir db 'system_dir_',0
  1123. txt_lib_name db 'lib_name_',0
  1124. txt_lib_path db ' sys_path, library_path, ',0
  1125. txt_sys_err db '‘¨á⥬­ ï ®è¨¡ª ',0
  1126. txt_ll_start db 'l_libs_start:',13,0
  1127. txt_lib db 9,'lib_',0
  1128. txt_ll db 'l_libs ',0
  1129. txt_err_m_f_lib db 'err_msg_found_lib_',0
  1130. txt_head_l db 'head_f_l',0
  1131. txt_err_m_i_lib db 'err_msg_import_',0
  1132. txt_head_i db 'head_f_i',0
  1133. txt_ll_end db 'l_libs_end:',13,0
  1134. txt_but_create db '0x40000000',0 ;tmp
  1135. txt_0x33000000 db '0x33000000',0 ;tmp
  1136. txt_struct db 'struct ',0
  1137. txt_ends db 'ends',13,13,0
  1138. txt_mov db 'mov ',0
  1139. txt_xor db 'xor ',0
  1140. txt_or db 'or  ',0
  1141. txt_cmp db 'cmp ',0
  1142. txt_call db 'call ',0
  1143. txt_jne_f db 'jne @f',0
  1144. txt_a_met db '@@:',0
  1145. txt_ah db 'ah',0
  1146. txt_eax db 'eax',0
  1147. txt_ebx db 'ebx',0
  1148. txt_ecx db 'ecx',0
  1149. txt_edx db 'edx',0
  1150. txt_edi db 'edi',0
  1151. txt_esi db 'esi',0
  1152. txt_align_4 db 'align 4',13,0
  1153. txt_d_poi db ':',0
  1154. txt_ret db 'ret',13,0
  1155. txt_i65p db '*65536+',0
  1156. txt_std_mouse_ed:
  1157.         db 9,'stdcall [edit_box_mouse], ',0
  1158. txt_std_mouse_cb:
  1159.         db 9,'stdcall [check_box_mouse], ',0
  1160. txt_std_key_ed:
  1161.         db 9,'stdcall [edit_box_key], ',0
  1162. txt_incl:
  1163.         db 'include ',0
  1164. txt_ebox db ' edit_box',0
  1165. txt_editb_draw:
  1166.         db 9,'stdcall [edit_box_draw], ',0
  1167. txt_cbox_draw:
  1168.         db 9,'stdcall [check_box_draw], ',0
  1169.  
  1170. txt_but_1:
  1171. db 'align 4',13,'button:',13,9,'mcall 17',13
  1172. txt_but_2:
  1173. db 9,'cmp ah,1',13,9,'jne still',13,'.exit:',13,9,'mcall -1',13
  1174. txt_but_3:
  1175.  
  1176. txt_key_1:
  1177. db 'align 4',13,'key:',13,9,'mcall 2',13
  1178. txt_key_2:
  1179. db 9,'jmp still',13
  1180. txt_key_3:
  1181.  
  1182. align 4
  1183. proc get_obj_id, p_obj:dword, txt_buf:dword
  1184.         push eax ecx edx
  1185.         mov eax,dword[p_obj]
  1186.         sub eax,[tree2.data_info]
  1187.         xor edx,edx
  1188.         xor ecx,ecx
  1189.         mov cx,word[tree2.info_size]
  1190.         div ecx
  1191.  
  1192.         mov edx,dword[txt_buf]
  1193.         mov byte[edx],0
  1194.         stdcall str_cat_value,edx,eax
  1195.         pop edx ecx eax
  1196.         ret
  1197. endp
  1198.  
  1199. ;--- òåêñòîâûå ôóíêöèè ---
  1200.  
  1201. align 4
  1202. proc mem_clear, mem:dword, len:dword
  1203.         push eax ecx edi
  1204.         cld
  1205.         xor al,al
  1206.         mov edi, dword[mem]
  1207.         mov ecx, dword[len]
  1208.         repne stosb
  1209.         pop edi ecx eax
  1210.         ret
  1211. endp
  1212.  
  1213. align 4
  1214. proc str_cat, str1:dword, str2:dword
  1215.         push eax ecx edi esi
  1216.         mov esi,dword[str2]
  1217.         stdcall str_len,esi
  1218.         mov ecx,eax
  1219.         inc ecx
  1220.         mov edi,dword[str1]
  1221.         stdcall str_len,edi
  1222.         add edi,eax
  1223.         cld
  1224.         repne movsb
  1225.         pop esi edi ecx eax
  1226.         ret
  1227. endp
  1228.  
  1229. align 4
  1230. proc str_cat_value, str1:dword, value:dword
  1231.         pushad
  1232.         mov edi,[str1]
  1233.         stdcall str_len,edi
  1234.         add edi,eax
  1235.         mov eax,[value]
  1236.         call tl_convert_to_str
  1237.         popad
  1238.         ret
  1239. endp
  1240.  
  1241. ;output:
  1242. ; eax = strlen
  1243. align 4
  1244. proc str_len, str1:dword
  1245.         mov eax,[str1]
  1246.         @@:
  1247.                 cmp byte[eax],0
  1248.                 je @f
  1249.                 inc eax
  1250.                 jmp @b
  1251.         @@:
  1252.         sub eax,[str1]
  1253.         ret
  1254. endp
  1255.  
  1256. ;input:
  1257. ; eax = value
  1258. ; edi = string buffer
  1259. align 4
  1260. tl_convert_to_str:
  1261.         pushad
  1262.         stdcall mem_clear,edi,12
  1263.         call .str
  1264.         popad
  1265.         ret
  1266.  
  1267. align 4
  1268. .str:
  1269.         mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
  1270.                 ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âõîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé
  1271.         cmp eax,ecx  ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
  1272.         jb @f
  1273.                 xor edx,edx ;î÷èñòèòü edx
  1274.                 div ecx     ;ðàçäåëèòü - îñòàòîê â edx
  1275.                 push edx    ;ïîëîæèòü â ñòåê
  1276.                 ;dec edi    ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
  1277.                 call .str   ;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
  1278.                 pop eax
  1279.         @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
  1280.         or al,0x30  ;äàííàÿ êîìàíäà êîðî÷å  ÷åì äâå âûøå
  1281.         stosb       ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
  1282.         ret