Subversion Repositories Kolibri OS

Rev

Rev 1705 | 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. align 4
  232. proc get_code_auto, p_obj:dword
  233.         pushad
  234.                 insert_nl
  235.                 mov ebx,dword[p_obj]
  236.                 mov ecx,dword[ebx+u_object.modif-u_object]
  237.                 bt ecx,BIT_MOD_ACM
  238.                 jae @f
  239.                         ;àâòîìàòè÷åñêèå ñîáûòèÿ îò ìûøè
  240.                         call get_code_auto_m
  241.                 @@:
  242.                 bt ecx,BIT_MOD_ABU
  243.                 jae @f
  244.                         ;ñîçäàíèå ôóíêöèè button
  245.                         insert_but_beg
  246.                         call get_code_auto_but ;êîäû âûçîâà êíîïîê
  247.                         insert_but_end
  248.                         call get_code_a_but_fun ;êîäû ôóíêöèé, âûçûâàåìûõ ïðè íàæàòèè êíîïîê
  249.                 @@:
  250.                 bt ecx,BIT_MOD_ACD
  251.                 jae @f
  252.                         call get_code_auto_data_el
  253.                         call get_code_auto_data_dop
  254.                 @@:
  255.                 insert_nl
  256.         popad
  257.         ret
  258. endp
  259.  
  260.  
  261. align 4
  262. proc get_code_auto_m
  263.         pushad
  264.         stdcall dword[tl_node_poi_get_info], 0,tree2
  265.         pop esi
  266.         .beg_iterat:
  267.                 cmp esi,0
  268.                 je .find_no
  269.  
  270.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  271.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  272.                 cmp ebx,0
  273.                 je .find_no
  274.  
  275.                 cmp byte[ebx],C_ED
  276.                 jne @f
  277.                         stdcall insert_text, txt_std_mouse_ed
  278.                         ;insert_sp
  279.                         stdcall get_obj_text_col,ebx,0
  280.                         stdcall str_len,edx
  281.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  282.                         insert_nl
  283.                 @@:
  284.                 cmp byte[ebx],C_CB
  285.                 jne @f
  286.                         stdcall insert_text, txt_std_mouse_cb
  287.                         ;insert_sp
  288.                         stdcall get_obj_text_col,ebx,0
  289.                         stdcall str_len,edx
  290.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  291.                         insert_nl
  292.                 @@:
  293.  
  294.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  295.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  296.  
  297.                 jmp .beg_iterat
  298.         .find_no:
  299.         popad
  300.         ret
  301. endp
  302.  
  303. ;ñîçäàíèå äàííûõ (ñòðóêòóð îáúåêòîâ)
  304. align 4
  305. proc get_code_auto_data_el
  306.         pushad
  307.         insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  308.  
  309.         stdcall dword[tl_node_poi_get_info], 0,tree2
  310.         pop esi
  311.         .beg_iterat:
  312.                 cmp esi,0
  313.                 je .find_no
  314.  
  315.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  316.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  317.                 cmp ebx,0
  318.                 je .find_no
  319.  
  320.                 cmp byte[ebx],C_ED
  321.                 jne @f
  322.                         ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
  323.                         stdcall get_obj_text_col,ebx,0
  324.                         stdcall str_len,edx
  325.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  326.                         stdcall insert_text, txt_ebox
  327.  
  328.                         mov ecx,1
  329.                         .prop:
  330.                                 insert_sp
  331.                                 stdcall get_obj_text_col,ebx,ecx
  332.                                 stdcall str_len,edx
  333.                                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  334.                                 insert_coma
  335.                                 inc ecx
  336.                                 cmp ecx,10
  337.                         jl .prop
  338.  
  339.                         insert_br
  340.                         ;insert_tab
  341.                         stdcall insert_text, txt_txt
  342.  
  343.                         mov edx,fp_icon
  344.                         stdcall get_obj_id, ebx,edx
  345.                         stdcall str_len,edx ;eax = len(fp_icon)
  346.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  347.  
  348.                         ;insert_coma
  349.                         ;insert_sp
  350.                         stdcall insert_text, txt_mouse_dd
  351.                         insert_nl
  352.                 @@:
  353.                 ;cmp byte[ebx],C_CB
  354.                 ;jne @f
  355.                 ;@@:
  356.  
  357.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  358.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  359.  
  360.                 jmp .beg_iterat
  361.         .find_no:
  362.         popad
  363.         ret
  364. endp
  365.  
  366. ;
  367. align 4
  368. proc get_code_auto_data_dop
  369.         pushad
  370.         insert_nl ;îòñòóï äëÿ ôîðìàòèðîâàíèÿ
  371.  
  372.         stdcall dword[tl_node_poi_get_info], 0,tree2
  373.         pop esi
  374.         .beg_iterat:
  375.                 cmp esi,0
  376.                 je .find_no
  377.  
  378.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  379.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  380.                 cmp ebx,0
  381.                 je .find_no
  382.  
  383.                 cmp byte[ebx],C_ED
  384.                 jne @f
  385.                         ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
  386.                         stdcall insert_text, txt_txt
  387.  
  388.                         mov edx,fp_icon
  389.                         stdcall get_obj_id, ebx,edx
  390.                         stdcall str_len,edx ;eax = len(fp_icon)
  391.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  392.                         stdcall insert_text, txt_times
  393.  
  394.                         stdcall get_obj_text_col,ebx,9
  395.                         stdcall str_len,edx
  396.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  397.  
  398.                         insert_plus
  399.                         stdcall insert_text, txt_2
  400.                         stdcall insert_text, txt_db
  401.                         insert_0
  402.                         insert_nl
  403.                 @@:
  404.                 ;cmp byte[ebx],C_CB
  405.                 ;jne @f
  406.                 ;@@:
  407.  
  408.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  409.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  410.  
  411.                 jmp .beg_iterat
  412.         .find_no:
  413.         popad
  414.         ret
  415. endp
  416.  
  417. ;ñâÿçûâàåì êíîïêè ñ ôóíêöèÿìè
  418. align 4
  419. proc get_code_auto_but
  420.         pushad
  421.         stdcall dword[tl_node_poi_get_info], 0,tree2
  422.         pop esi
  423.         .beg_iterat:
  424.                 cmp esi,0
  425.                 je .find_no
  426.  
  427.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  428.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  429.                 cmp ebx,0
  430.                 je .find_no
  431.  
  432.                 cmp byte[ebx],C_BU
  433.                 jne @f
  434.                         insert_tab
  435.                         insert_cmp
  436.                         insert_reg8 txt_ah
  437.                         insert_coma
  438.                         stdcall get_obj_text_col,ebx,0
  439.                         stdcall str_len,edx
  440.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  441.                         insert_nl
  442.                         insert_tab
  443.                         stdcall insert_text, txt_jne_f
  444.                         insert_nl
  445.                         insert_tab
  446.                         insert_tab
  447.                         stdcall insert_text, txt_call
  448.                         stdcall get_obj_text_col,ebx,6
  449.                         stdcall str_len,edx
  450.                         cmp eax,1
  451.                         jl .c_fun
  452.                                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  453.                         .c_fun:
  454.                         insert_nl
  455.                         insert_tab
  456.                         insert_a_met ;@@:
  457.                         insert_nl
  458.                 @@:
  459.  
  460.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  461.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  462.  
  463.                 jmp .beg_iterat
  464.         .find_no:
  465.         popad
  466.         ret
  467. endp
  468.  
  469. ;áåðåì êîäû äëÿ ôóíêöèé íàæàòèé íà êíîïêè
  470. align 4
  471. proc get_code_a_but_fun
  472.         pushad
  473.         stdcall dword[tl_node_poi_get_info], 0,tree2
  474.         pop esi
  475.         .beg_iterat:
  476.                 cmp esi,0
  477.                 je .find_no
  478.  
  479.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  480.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  481.                 cmp ebx,0
  482.                 je .find_no
  483.  
  484.                 cmp byte[ebx],C_BU
  485.                 jne @f
  486.                         stdcall get_obj_text_col,ebx,6
  487.                         stdcall str_len,edx
  488.                         cmp eax,1
  489.                         jl .c_fun
  490.                                 insert_nl
  491.                                 stdcall insert_text, txt_align_4
  492.                                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  493.                                 insert_d_poi
  494.                                 insert_nl
  495.                                 insert_tab
  496.                                 insert_ret
  497.                         .c_fun:
  498.                 @@:
  499.  
  500.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  501.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  502.  
  503.                 jmp .beg_iterat
  504.         .find_no:
  505.         popad
  506.         ret
  507. endp
  508.  
  509. align 4
  510. proc get_code_key, p_obj:dword
  511.         pushad
  512.                 insert_nl
  513.                 mov ebx,dword[p_obj]
  514.  
  515.                 insert_key_beg
  516.                 call get_code_funct_key ;êîäû âûçîâà êíîïîê
  517.                 insert_key_end
  518.  
  519.                 insert_nl
  520.         popad
  521.         ret
  522. endp
  523.  
  524. align 4
  525. proc get_code_funct_key
  526.         pushad
  527.         stdcall dword[tl_node_poi_get_info], 0,tree2
  528.         pop esi
  529.         .beg_iterat:
  530.                 cmp esi,0
  531.                 je .find_no
  532.  
  533.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  534.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  535.                 cmp ebx,0
  536.                 je .find_no
  537.  
  538.                 cmp byte[ebx],C_ED
  539.                 jne @f
  540.                         stdcall insert_text, txt_std_key_ed
  541.                         stdcall insert_text_prop,ebx,0
  542.                         insert_nl
  543.                 @@:
  544.  
  545.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  546.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  547.  
  548.                 jmp .beg_iterat
  549.         .find_no:
  550.         popad
  551.         ret
  552. endp
  553.  
  554. ;îáúåêòû ïîäêëþ÷åíèÿ ôàéëîâ 'include ...'
  555. align 4
  556. proc get_code_incl, p_obj:dword
  557.         pushad
  558.                 stdcall insert_text, txt_incl
  559.                 mov ebx,dword[p_obj]
  560.                 stdcall insert_text_prop,ebx,0
  561.  
  562.                 stdcall get_obj_text_col,ebx,1
  563.                 stdcall str_len,edx
  564.                 cmp eax,1
  565.                 jl @f
  566.                         insert_sp
  567.                         insert_com
  568.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  569.                 @@:
  570.  
  571.                 insert_nl
  572.         popad
  573.         ret
  574. endp
  575.  
  576. align 4
  577. proc get_code_comment, p_obj:dword
  578.         insert_com
  579.         stdcall insert_text_prop, dword[p_obj],0
  580.         insert_nl
  581.         ret
  582. endp
  583.  
  584. ;ñîçäàåì êîä çàäàíèÿ îêíà
  585. align 4
  586. proc get_code_window, p_obj:dword
  587.         pushad
  588.                 mov ebx,dword[p_obj]
  589.                 ;2,3,4,5,6 - x,y,w,h,col_bkg
  590.  
  591.                 stdcall insert_text, txt_draw_wb
  592.  
  593.                 insert_tab
  594.                 insert_xor
  595.                 insert_reg txt_eax
  596.                 insert_coma
  597.                 insert_reg txt_eax
  598.                 insert_nl
  599.  
  600.                 ;mov ebx,...
  601.                 insert_tab
  602.                 stdcall insert_text, txt_mov
  603.                 insert_reg txt_ebx
  604.                 insert_coma
  605.                 stdcall insert_text_prop, ebx,2
  606.                 insert_i65p
  607.                 stdcall insert_text_prop, ebx,4
  608.                 insert_nl
  609.  
  610.                 ;mov ecx,...
  611.                 insert_tab
  612.                 stdcall insert_text, txt_mov
  613.                 insert_reg txt_ecx
  614.                 insert_coma
  615.                 stdcall insert_text_prop, ebx,3
  616.                 insert_i65p
  617.                 stdcall insert_text_prop, ebx,5
  618.                 insert_nl
  619.  
  620.                 ;mov edx,...
  621.                 insert_tab
  622.                 stdcall insert_text, txt_mov
  623.                 insert_reg txt_edx
  624.                 insert_coma
  625.                 stdcall insert_text_prop, ebx,6
  626.                 insert_nl
  627.  
  628.                 ;or edx,0x33000000
  629.                 stdcall insert_text, txt_or
  630.                 insert_reg txt_edx
  631.                 insert_coma
  632.                 stdcall insert_text, txt_0x33000000
  633.                 insert_nl
  634.  
  635.                 ;mov edi,...
  636.                 insert_tab
  637.                 stdcall insert_text, txt_mov
  638.                 insert_reg txt_edi
  639.                 insert_coma
  640.                 stdcall insert_text_prop, ebx,0
  641.                 insert_nl
  642.  
  643.                 insert_tab
  644.                 stdcall insert_text, txt_i_40
  645.  
  646.                 call get_code_draw_obj
  647.  
  648.                 stdcall insert_text, txt_draw_we
  649.         popad
  650.         ret
  651. endp
  652.  
  653.  
  654. ;ôîðìèðóåì âûçîâ ôóíêöèé äëÿ ðèñîâàíèÿ îáúåêòîâ
  655. align 4
  656. proc get_code_draw_obj
  657.         pushad
  658.         stdcall dword[tl_node_poi_get_info], 0,tree2
  659.         pop esi
  660.         .beg_iterat:
  661.                 cmp esi,0
  662.                 je .find_no
  663.  
  664.                 stdcall dword[tl_node_poi_get_data], esi,tree2
  665.                 pop ebx ;ïîëó÷àåì äàííûå óçëà
  666.                 cmp ebx,0
  667.                 je .find_no
  668.  
  669.                 cmp byte[ebx],C_ED
  670.                 jne @f
  671.                         stdcall insert_text, txt_editb_draw
  672.                         stdcall insert_text_prop, ebx,0
  673.                         insert_nl
  674.                 @@:
  675.                 cmp byte[ebx],C_CB
  676.                 jne @f
  677.                         stdcall insert_text, txt_cbox_draw
  678.                         stdcall insert_text_prop, ebx,0
  679.                         insert_nl
  680.                 @@:
  681.                 cmp byte[ebx],C_BU
  682.                 jne @f
  683.                         insert_tab
  684.                         stdcall insert_text, txt_mov
  685.                         insert_reg txt_eax
  686.                         insert_coma
  687.                         stdcall insert_text, txt_8
  688.                         insert_nl
  689.  
  690.                         insert_tab
  691.                         stdcall insert_text, txt_mov
  692.                         insert_reg txt_ebx
  693.                         insert_coma
  694.                         stdcall insert_text_prop, ebx,1
  695.                         insert_i65p
  696.                         stdcall insert_text_prop, ebx,3
  697.                         insert_nl
  698.  
  699.                         insert_tab
  700.                         stdcall insert_text, txt_mov
  701.                         insert_reg txt_ecx
  702.                         insert_coma
  703.                         stdcall insert_text_prop, ebx,2
  704.                         insert_i65p
  705.                         stdcall insert_text_prop, ebx,4
  706.                         insert_nl
  707.  
  708.                         insert_tab
  709.                         stdcall insert_text, txt_mov
  710.                         insert_reg txt_edx
  711.                         insert_coma
  712.                         stdcall insert_text_prop, ebx,0
  713.                         insert_nl
  714.  
  715.                         insert_tab
  716.                         stdcall insert_text, txt_or
  717.                         insert_reg txt_edx
  718.                         insert_coma
  719.                         stdcall insert_text, txt_but_create
  720.                         insert_nl
  721.  
  722.                         insert_tab
  723.                         stdcall insert_text, txt_mov
  724.                         insert_reg txt_esi
  725.                         insert_coma
  726.                         stdcall insert_text_prop, ebx,5 ;button color
  727.                         insert_nl
  728.  
  729.                         insert_tab
  730.                         stdcall insert_text, txt_i_40
  731.                         insert_nl
  732.                 @@:
  733.                 cmp byte[ebx],C_RE
  734.                 jne @f
  735.                         insert_tab
  736.                         stdcall insert_text, txt_mov
  737.                         insert_reg txt_eax
  738.                         insert_coma
  739.                         stdcall insert_text, txt_1
  740.                         stdcall insert_text, txt_3
  741.                         insert_nl
  742.  
  743.                         insert_tab
  744.                         stdcall insert_text, txt_mov
  745.                         insert_reg txt_ebx
  746.                         insert_coma
  747.                         stdcall insert_text_prop, ebx,1
  748.                         insert_i65p
  749.                         stdcall insert_text_prop, ebx,3
  750.                         insert_nl
  751.  
  752.                         insert_tab
  753.                         stdcall insert_text, txt_mov
  754.                         insert_reg txt_ecx
  755.                         insert_coma
  756.                         stdcall insert_text_prop, ebx,2
  757.                         insert_i65p
  758.                         stdcall insert_text_prop, ebx,4
  759.                         insert_nl
  760.  
  761.                         insert_tab
  762.                         stdcall insert_text, txt_mov
  763.                         insert_reg txt_edx
  764.                         insert_coma
  765.                         stdcall insert_text_prop, ebx,0 ;rect color
  766.                         insert_nl
  767.  
  768.                         insert_tab
  769.                         stdcall insert_text, txt_i_40
  770.                         insert_nl
  771.                 @@:
  772.  
  773.                 stdcall dword[tl_node_poi_get_next_info], esi,tree2
  774.                 pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó
  775.  
  776.                 jmp .beg_iterat
  777.         .find_no:
  778.         popad
  779.         ret
  780. endp
  781.  
  782.  
  783.  
  784. align 4
  785. proc get_code_struct, p_obj:dword
  786.         pushad
  787.                 mov ebx,dword[p_obj]
  788.                 ;0 - name
  789.  
  790.                 stdcall [ted_text_add], tedit0,txt_struct,7,ted_opt_ed_move_cursor
  791.                 stdcall get_obj_text_col,ebx,0
  792.                 stdcall str_len,edx
  793.                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  794.                 insert_nl
  795.  
  796.         popad
  797.         ret
  798. endp
  799.  
  800. ;ñîçäàòü êîä îáúÿâëåíèÿ ïåðåìåííîé
  801. align 4
  802. proc get_code_variable, p_obj:dword,o_lev:dword
  803.         pushad
  804.                 mov ebx,dword[p_obj]
  805.                 ;0,1,2 - name,value,comment
  806.  
  807.                 mov ecx,dword[o_lev]
  808.                 cmp cl,0
  809.                 je .no_tab ;èçáåãàåì çàöèêëèâàíèÿ (0-1 = 2^32-1)
  810.                 and cx,0xff
  811.                 cld
  812.                 @@:
  813.                         insert_tab ;ôîðìèðîâàíèå îòñòóïà ïåðåä ïåðåìåííîé
  814.                 loop @b
  815.                 .no_tab:
  816.  
  817.                 stdcall get_obj_text_col,ebx,0
  818.                 stdcall str_len,edx
  819.                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  820.                 insert_sp
  821.  
  822.                 mov ecx,dword[ebx+u_object.typid-u_object] ;ecx - îòíîñèòåëüíûé èíäåêñ ðîäèòåëüñêîãî îáúåêòà (â ïàìÿòè)
  823.                 xor eax,eax
  824.                 mov ax,[tree2.info_size]
  825.                 imul ecx,eax ;óìíîæàåì èíäåêñ íà ðàçìåð ñòðóêòóðû
  826.                 add ecx,[tree2.data_info] ;ecx - óêàçàòåëü äàííûå ðîäèòåëüñêîãî óçëà
  827.  
  828.                 ;ïðîâåðêó íà ïðàâèëüíîñòü ecx ???
  829.  
  830.                 stdcall get_obj_text_col,ecx,0
  831.                 stdcall str_len,edx
  832.                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  833.                 insert_sp
  834.  
  835.                 stdcall get_obj_text_col,ebx,1
  836.                 stdcall str_len,edx
  837.                 stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  838.  
  839.                 stdcall get_obj_text_col,ebx,2
  840.                 stdcall str_len,edx
  841.                 cmp eax,1
  842.                 jl @f
  843.                         insert_sp
  844.                         insert_com
  845.                         stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
  846.                 @@:
  847.                 insert_nl
  848.  
  849.         popad
  850.         ret
  851. endp
  852.  
  853.  
  854.  
  855. ;--- òåêñòîâûå êîíñòàíòû ---
  856. txt_coma db ',',0
  857. txt_i_40 db 'int 0x40',13,0
  858. txt_0 db '0',0
  859. txt_1 db '1',0
  860. txt_2 db '2',0
  861. txt_3 db '3',0
  862. txt_4 db '4',0
  863. txt_8 db '8',0
  864. txt_plus db '+',0
  865. txt_nl db 13,0
  866. txt_com db ';',0
  867. txt_sp db ' ',0
  868. txt_tab db 9,0
  869. txt_br db '\',13,9,0
  870. txt_txt:
  871.         db 'txt_',0
  872. txt_db:
  873.         db ' db ',0
  874. txt_mouse_dd:
  875.         db ', mouse_dd, ',0
  876. txt_times:
  877.         db ':',13,9,'times ',0
  878. txt_draw_wb:
  879.         db 13,'align 4',13,'draw_window:',13,'pushad',13,9,'mcall 12,1',13,0
  880. txt_draw_we:
  881.         db 9,'mcall 12,2',13,'popad',13,9,'ret',13,0
  882. txt_but_create db '0x40000000',0 ;tmp
  883. txt_0x33000000 db '0x33000000',0 ;tmp
  884. txt_struct db 'struct ',0
  885. txt_ends db 'ends',13,13,0
  886. txt_mov db 'mov ',0
  887. txt_xor db 'xor ',0
  888. txt_or db 'or  ',0
  889. txt_cmp db 'cmp ',0
  890. txt_call db 'call ',0
  891. txt_jne_f db 'jne @f',0
  892. txt_a_met db '@@:',0
  893. txt_ah db 'ah',0
  894. txt_eax db 'eax',0
  895. txt_ebx db 'ebx',0
  896. txt_ecx db 'ecx',0
  897. txt_edx db 'edx',0
  898. txt_edi db 'edi',0
  899. txt_esi db 'esi',0
  900. txt_align_4 db 'align 4',13,0
  901. txt_d_poi db ':',0
  902. txt_ret db 'ret',13,0
  903. txt_i65p db '*65536+',0
  904. txt_std_mouse_ed:
  905.         db 9,'stdcall [edit_box_mouse], ',0
  906. txt_std_mouse_cb:
  907.         db 9,'stdcall [check_box_mouse], ',0
  908. txt_std_key_ed:
  909.         db 9,'stdcall [edit_box_key], ',0
  910. txt_incl:
  911.         db 'include ',0
  912. txt_ebox:
  913.         db ' edit_box'
  914.         .end: db 0
  915. txt_editb_draw:
  916.         db 9,'stdcall [edit_box_draw], ',0
  917. txt_cbox_draw:
  918.         db 9,'stdcall [check_box_draw], ',0
  919.  
  920. txt_but_1:
  921. db 'align 4',13,'button:',13,9,'mcall 17',13
  922. txt_but_2:
  923. db 9,'cmp ah,1',13,9,'jne still',13,'.exit:',13,9,'mcall -1',13
  924. txt_but_3:
  925.  
  926. txt_key_1:
  927. db 'align 4',13,'key:',13,9,'mcall 2',13
  928. txt_key_2:
  929. db 9,'jmp still',13
  930. txt_key_3:
  931.  
  932. align 4
  933. proc get_obj_id, p_obj:dword, txt_buf:dword
  934.         push eax ecx edx
  935.         mov eax,dword[p_obj]
  936.         sub eax,[tree2.data_info]
  937.         xor edx,edx
  938.         xor ecx,ecx
  939.         mov cx,word[tree2.info_size]
  940.         div ecx
  941.  
  942.         mov edx,dword[txt_buf]
  943.         mov byte[edx],0
  944.         stdcall str_cat_value,edx,eax
  945.         pop edx ecx eax
  946.         ret
  947. endp
  948.  
  949. ;--- òåêñòîâûå ôóíêöèè ---
  950.  
  951. align 4
  952. proc mem_clear, mem:dword, len:dword
  953.         push eax ecx edi
  954.         cld
  955.         xor al,al
  956.         mov edi, dword[mem]
  957.         mov ecx, dword[len]
  958.         repne stosb
  959.         pop edi ecx eax
  960.         ret
  961. endp
  962.  
  963. align 4
  964. proc str_cat, str1:dword, str2:dword
  965.         push eax ecx edi esi
  966.         mov esi,dword[str2]
  967.         stdcall str_len,esi
  968.         mov ecx,eax
  969.         inc ecx
  970.         mov edi,dword[str1]
  971.         stdcall str_len,edi
  972.         add edi,eax
  973.         cld
  974.         repne movsb
  975.         pop esi edi ecx eax
  976.         ret
  977. endp
  978.  
  979. align 4
  980. proc str_cat_value, str1:dword, value:dword
  981.         pushad
  982.         mov edi,[str1]
  983.         stdcall str_len,edi
  984.         add edi,eax
  985.         mov eax,[value]
  986.         call tl_convert_to_str
  987.         popad
  988.         ret
  989. endp
  990.  
  991. ;output:
  992. ; eax = strlen
  993. align 4
  994. proc str_len, str1:dword
  995.         mov eax,[str1]
  996.         @@:
  997.                 cmp byte[eax],0
  998.                 je @f
  999.                 inc eax
  1000.                 jmp @b
  1001.         @@:
  1002.         sub eax,[str1]
  1003.         ret
  1004. endp
  1005.  
  1006. ;input:
  1007. ; eax = value
  1008. ; edi = string buffer
  1009. align 4
  1010. tl_convert_to_str:
  1011.         pushad
  1012.         stdcall mem_clear,edi,12
  1013.         call .str
  1014.         popad
  1015.         ret
  1016.  
  1017. align 4
  1018. .str:
  1019.         mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
  1020.                 ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âõîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé
  1021.         cmp eax,ecx  ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
  1022.         jb @f
  1023.                 xor edx,edx ;î÷èñòèòü edx
  1024.                 div ecx     ;ðàçäåëèòü - îñòàòîê â edx
  1025.                 push edx    ;ïîëîæèòü â ñòåê
  1026.                 ;dec edi    ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
  1027.                 call .str   ;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
  1028.                 pop eax
  1029.         @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
  1030.         or al,0x30  ;äàííàÿ êîìàíäà êîðî÷å  ÷åì äâå âûøå
  1031.         stosb       ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
  1032.         ret