diff --git a/programs/develop/kol_f_edit/about.png b/programs/develop/kol_f_edit/about.png new file mode 100644 index 0000000000..e93eedfb14 Binary files /dev/null and b/programs/develop/kol_f_edit/about.png differ diff --git a/programs/develop/kol_f_edit/base.bmp b/programs/develop/kol_f_edit/base.bmp new file mode 100644 index 0000000000..a6619c972a Binary files /dev/null and b/programs/develop/kol_f_edit/base.bmp differ diff --git a/programs/develop/kol_f_edit/build.bat b/programs/develop/kol_f_edit/build.bat new file mode 100644 index 0000000000..6e9616e555 --- /dev/null +++ b/programs/develop/kol_f_edit/build.bat @@ -0,0 +1,17 @@ +if not exist bin mkdir bin +@fasm.exe -m 16384 ced_view.asm bin\ced_view.kex +@kpack bin\ced_view.kex +@fasm.exe -m 16384 ob_o.asm bin\ob_o.opt + +if not exist bin\tl_sys_16.png @copy tl_sys_16.png bin\tl_sys_16.png +if not exist bin\icon.bmp @copy icon.bmp bin\icon.bmp +if not exist bin\base.bmp @copy base.bmp bin\base.bmp +if not exist bin\left.bmp @copy left.bmp bin\left.bmp +if not exist bin\oper.bmp @copy oper.bmp bin\oper.bmp +if not exist bin\font6x9.bmp @copy ..\..\fs\kfar\trunk\font6x9.bmp bin\font6x9.bmp +if not exist bin\asm.syn @copy ..\..\other\t_edit\info\asm.syn bin\asm.syn + +copy *.ced bin\*.ced +@fasm.exe -m 16384 ..\libraries\buf2d\trunk\buf2d.asm bin\buf2d.obj +@kpack bin\buf2d.obj +pause \ No newline at end of file diff --git a/programs/develop/kol_f_edit/ced_code_g.inc b/programs/develop/kol_f_edit/ced_code_g.inc new file mode 100644 index 0000000000..df6e5aa705 --- /dev/null +++ b/programs/develop/kol_f_edit/ced_code_g.inc @@ -0,0 +1,1032 @@ +; +; т ¤Єюь Їрщых ёюсЁрэ√ ЇєэъЎшш ёючфр■∙шх яЁюуЁрьэ√щ ъюф +; +u_object object ;тЁхьхээ√щ юс·хъЄ фы  чрфрэш  ёьх∙хэшщ + +macro insert_coma +{ + stdcall [ted_text_add], tedit0,txt_coma,1,ted_opt_ed_move_cursor +} +macro insert_nl +{ + stdcall [ted_text_add], tedit0,txt_nl,1,ted_opt_ed_move_cursor +} +macro insert_com +{ + stdcall [ted_text_add], tedit0,txt_com,1,ted_opt_ed_move_cursor +} +macro insert_sp +{ + stdcall [ted_text_add], tedit0,txt_sp,1,ted_opt_ed_move_cursor +} + +;ЇєэъЎш  тёЄрты хЄ ЄхъёЄютє■ ёЄЁюъє т ЄхъёЄют√щ ЁхфръЄюЁ +align 4 +proc insert_text, txt:dword + push eax + stdcall str_len,dword[txt] + cmp eax,1 + jl @f + stdcall [ted_text_add], tedit0,dword[txt],eax,ted_opt_ed_move_cursor + @@: + pop eax + ret +endp + +;тёЄрты хЄ єърчрээюх ётющёЄтю шч юс·хъЄр т ЄхъёЄют√щ ЁхфръЄюЁ +align 4 +proc insert_text_prop, p_obj:dword,index:dword + push eax edx + mov eax,[p_obj] + mov edx,[index] + stdcall get_obj_text_col,eax,edx + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + pop edx eax + ret +endp + +macro insert_tab +{ + stdcall [ted_text_add], tedit0,txt_tab,1,ted_opt_ed_move_cursor +} +macro insert_br +{ + stdcall [ted_text_add], tedit0,txt_br,3,ted_opt_ed_move_cursor +} +macro insert_a_met +{ + stdcall [ted_text_add], tedit0,txt_a_met,3,ted_opt_ed_move_cursor +} +macro insert_0 +{ + stdcall [ted_text_add], tedit0,txt_0,1,ted_opt_ed_move_cursor +} +macro insert_plus +{ + stdcall [ted_text_add], tedit0,txt_plus,1,ted_opt_ed_move_cursor +} +macro insert_xor +{ + stdcall [ted_text_add], tedit0,txt_xor,4,ted_opt_ed_move_cursor +} +macro insert_cmp +{ + stdcall [ted_text_add], tedit0,txt_cmp,4,ted_opt_ed_move_cursor +} +macro insert_reg reg_name +{ + stdcall [ted_text_add], tedit0,reg_name,3,ted_opt_ed_move_cursor +} +macro insert_reg8 reg_name +{ + stdcall [ted_text_add], tedit0,reg_name,2,ted_opt_ed_move_cursor +} +macro insert_i65p +{ + stdcall [ted_text_add], tedit0,txt_i65p,7,ted_opt_ed_move_cursor +} + + +; +macro insert_but_beg +{ + stdcall [ted_text_add], tedit0,txt_but_1,txt_but_2-txt_but_1,ted_opt_ed_move_cursor +} +macro insert_but_end +{ + stdcall [ted_text_add], tedit0,txt_but_2,txt_but_3-txt_but_2,ted_opt_ed_move_cursor +} +; +macro insert_key_beg +{ + stdcall [ted_text_add], tedit0,txt_key_1,txt_key_2-txt_key_1,ted_opt_ed_move_cursor +} +macro insert_key_end +{ + stdcall [ted_text_add], tedit0,txt_key_2,txt_key_3-txt_key_2,ted_opt_ed_move_cursor +} + +macro insert_d_poi +{ + stdcall [ted_text_add], tedit0,txt_d_poi,1,ted_opt_ed_move_cursor +} +macro insert_ret +{ + stdcall [ted_text_add], tedit0,txt_ret,4,ted_opt_ed_move_cursor +} + + +align 4 +but_code_gen: + call code_gen + cmp byte[show_mode],1 ;єёыютшх тшфшьюёЄш ЄхъёЄютюую юъэр + jne @f + stdcall [ted_draw], tedit0 + @@: + ret + +;ЇєэъЎш  ёючфр■∙р  ъюф тёхую Їрщыр +align 4 +code_gen: + stdcall [ted_clear], tedit0,1 +pushad + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + xor bl,bl + call code_gen_obj + stdcall [ted_text_add], tedit0,\ + txt_nl,1,ted_opt_ed_move_cursor+ted_opt_ed_change_time ;фюсрты хь ёшьтюы эютющ ёЄЁюъш ё юяЎшхщ ted_opt_ed_change_time фы  тючьюцэюёЄш ёюїЁрэхэш  Їрщыр + stdcall [ted_init_scroll_bars], tedit0, 4 ;ьхэ хь ЁрчьхЁ√ ёъЁюыышэуют +popad + ret + +;input: +; bl - єЁютхэ№ юс·хъЄр +; esi - єърчрЄхы№ эр єчхы +align 4 +code_gen_obj: +push ebx + .beg_iterat: + cmp esi,0 + je .find_no + + cmp byte[esi+2],bl ;lev + jl .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop eax ;яюыєўрхь фрээ√х єчыр + cmp eax,0 + je .find_no + + cmp byte[eax],C_ST + jne @f + stdcall get_code_struct,eax ;юсЁрсюЄър юс·хъЄр + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop ecx ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + cmp ecx,0 + je .find_no + cmp byte[ecx+2],bl ;lev + jle .end_st + mov esi,ecx + push bx + mov bl,byte[esi+2] + call code_gen_obj ;ЁхъєЁёштэ√щ т√чют фюўхЁэшї юс·хъЄют + pop bx + .end_st: + stdcall [ted_text_add], tedit0,txt_ends,6,ted_opt_ed_move_cursor + jmp .beg_iterat + @@: + cmp byte[eax],C_TT + jne @f + stdcall get_code_text,eax ;юсЁрсюЄър юс·хъЄр + @@: + cmp byte[eax],C_IN + jne @f + stdcall get_code_incl,eax ;юсЁрсюЄър юс·хъЄр + @@: + cmp byte[eax],C_CO + jne @f + stdcall get_code_comment,eax ;юсЁрсюЄър юс·хъЄр + @@: + cmp byte[eax],C_VR + jne @f + stdcall get_code_variable,eax,ebx ;юсЁрсюЄър юс·хъЄр + @@: + cmp byte[eax],C_WI + jne @f + stdcall get_code_window,eax ;юсЁрсюЄър юс·хъЄр + @@: + cmp byte[eax],C_AC + jne @f + stdcall get_code_auto,eax ;юсЁрсюЄър юс·хъЄр + @@: + cmp byte[eax],C_KE ;ъыртшрЄєЁр + jne @f + stdcall get_code_key,eax ;юсЁрсюЄър юс·хъЄр + @@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: +pop ebx + ret + + +align 4 +proc get_code_text, p_obj:dword + pushad + insert_nl + mov ebx,dword[p_obj] + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_nl + popad + ret +endp + +align 4 +proc get_code_auto, p_obj:dword + pushad + insert_nl + mov ebx,dword[p_obj] + mov ecx,dword[ebx+u_object.modif-u_object] + bt ecx,BIT_MOD_ACM + jae @f + ;ртЄюьрЄшўхёъшх ёюс√Єш  юЄ ь√°ш + call get_code_auto_m + @@: + bt ecx,BIT_MOD_ABU + jae @f + ;ёючфрэшх ЇєэъЎшш button + insert_but_beg + call get_code_auto_but ;ъюф√ т√чютр ъэюяюъ + insert_but_end + call get_code_a_but_fun ;ъюф√ ЇєэъЎшщ, т√ч√трхь√ї яЁш эрцрЄшш ъэюяюъ + @@: + bt ecx,BIT_MOD_ACD + jae @f + call get_code_auto_data_el + call get_code_auto_data_dop + @@: + insert_nl + popad + ret +endp + + +align 4 +proc get_code_auto_m + pushad + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_ED + jne @f + stdcall insert_text, txt_std_mouse_ed + ;insert_sp + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_nl + @@: + cmp byte[ebx],C_CB + jne @f + stdcall insert_text, txt_std_mouse_cb + ;insert_sp + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_nl + @@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + +;ёючфрэшх фрээ√ї (ёЄЁєъЄєЁ юс·хъЄют) +align 4 +proc get_code_auto_data_el + pushad + insert_nl ;юЄёЄєя фы  ЇюЁьрЄшЁютрэш  + + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_ED + jne @f + ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + stdcall insert_text, txt_ebox + + mov ecx,1 + .prop: + insert_sp + stdcall get_obj_text_col,ebx,ecx + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_coma + inc ecx + cmp ecx,10 + jl .prop + + insert_br + ;insert_tab + stdcall insert_text, txt_txt + + mov edx,fp_icon + stdcall get_obj_id, ebx,edx + stdcall str_len,edx ;eax = len(fp_icon) + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + + ;insert_coma + ;insert_sp + stdcall insert_text, txt_mouse_dd + insert_nl + @@: + ;cmp byte[ebx],C_CB + ;jne @f + ;@@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + +; +align 4 +proc get_code_auto_data_dop + pushad + insert_nl ;юЄёЄєя фы  ЇюЁьрЄшЁютрэш  + + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_ED + jne @f + ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt + stdcall insert_text, txt_txt + + mov edx,fp_icon + stdcall get_obj_id, ebx,edx + stdcall str_len,edx ;eax = len(fp_icon) + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + stdcall insert_text, txt_times + + stdcall get_obj_text_col,ebx,9 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + + insert_plus + stdcall insert_text, txt_2 + stdcall insert_text, txt_db + insert_0 + insert_nl + @@: + ;cmp byte[ebx],C_CB + ;jne @f + ;@@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + +;ёт ч√трхь ъэюяъш ё ЇєэъЎш ьш +align 4 +proc get_code_auto_but + pushad + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_BU + jne @f + insert_tab + insert_cmp + insert_reg8 txt_ah + insert_coma + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_nl + insert_tab + stdcall insert_text, txt_jne_f + insert_nl + insert_tab + insert_tab + stdcall insert_text, txt_call + stdcall get_obj_text_col,ebx,6 + stdcall str_len,edx + cmp eax,1 + jl .c_fun + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + .c_fun: + insert_nl + insert_tab + insert_a_met ;@@: + insert_nl + @@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + +;схЁхь ъюф√ фы  ЇєэъЎшщ эрцрЄшщ эр ъэюяъш +align 4 +proc get_code_a_but_fun + pushad + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_BU + jne @f + stdcall get_obj_text_col,ebx,6 + stdcall str_len,edx + cmp eax,1 + jl .c_fun + insert_nl + stdcall insert_text, txt_align_4 + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_d_poi + insert_nl + insert_tab + insert_ret + .c_fun: + @@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + +align 4 +proc get_code_key, p_obj:dword + pushad + insert_nl + mov ebx,dword[p_obj] + + insert_key_beg + call get_code_funct_key ;ъюф√ т√чютр ъэюяюъ + insert_key_end + + insert_nl + popad + ret +endp + +align 4 +proc get_code_funct_key + pushad + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_ED + jne @f + stdcall insert_text, txt_std_key_ed + stdcall insert_text_prop,ebx,0 + insert_nl + @@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + +;юс·хъЄ√ яюфъы■ўхэш  Їрщыют 'include ...' +align 4 +proc get_code_incl, p_obj:dword + pushad + stdcall insert_text, txt_incl + mov ebx,dword[p_obj] + stdcall insert_text_prop,ebx,0 + + stdcall get_obj_text_col,ebx,1 + stdcall str_len,edx + cmp eax,1 + jl @f + insert_sp + insert_com + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + @@: + + insert_nl + popad + ret +endp + +align 4 +proc get_code_comment, p_obj:dword + insert_com + stdcall insert_text_prop, dword[p_obj],0 + insert_nl + ret +endp + +;ёючфрхь ъюф чрфрэш  юъэр +align 4 +proc get_code_window, p_obj:dword + pushad + mov ebx,dword[p_obj] + ;2,3,4,5,6 - x,y,w,h,col_bkg + + stdcall insert_text, txt_draw_wb + + insert_tab + insert_xor + insert_reg txt_eax + insert_coma + insert_reg txt_eax + insert_nl + + ;mov ebx,... + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_ebx + insert_coma + stdcall insert_text_prop, ebx,2 + insert_i65p + stdcall insert_text_prop, ebx,4 + insert_nl + + ;mov ecx,... + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_ecx + insert_coma + stdcall insert_text_prop, ebx,3 + insert_i65p + stdcall insert_text_prop, ebx,5 + insert_nl + + ;mov edx,... + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_edx + insert_coma + stdcall insert_text_prop, ebx,6 + insert_nl + + ;or edx,0x33000000 + stdcall insert_text, txt_or + insert_reg txt_edx + insert_coma + stdcall insert_text, txt_0x33000000 + insert_nl + + ;mov edi,... + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_edi + insert_coma + stdcall insert_text_prop, ebx,0 + insert_nl + + insert_tab + stdcall insert_text, txt_i_40 + + call get_code_draw_obj + + stdcall insert_text, txt_draw_we + popad + ret +endp + + +;ЇюЁьшЁєхь т√чют ЇєэъЎшщ фы  Ёшёютрэш  юс·хъЄют +align 4 +proc get_code_draw_obj + pushad + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + .beg_iterat: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop ebx ;яюыєўрхь фрээ√х єчыр + cmp ebx,0 + je .find_no + + cmp byte[ebx],C_ED + jne @f + stdcall insert_text, txt_editb_draw + stdcall insert_text_prop, ebx,0 + insert_nl + @@: + cmp byte[ebx],C_CB + jne @f + stdcall insert_text, txt_cbox_draw + stdcall insert_text_prop, ebx,0 + insert_nl + @@: + cmp byte[ebx],C_BU + jne @f + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_eax + insert_coma + stdcall insert_text, txt_8 + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_ebx + insert_coma + stdcall insert_text_prop, ebx,1 + insert_i65p + stdcall insert_text_prop, ebx,3 + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_ecx + insert_coma + stdcall insert_text_prop, ebx,2 + insert_i65p + stdcall insert_text_prop, ebx,4 + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_edx + insert_coma + stdcall insert_text_prop, ebx,0 + insert_nl + + insert_tab + stdcall insert_text, txt_or + insert_reg txt_edx + insert_coma + stdcall insert_text, txt_but_create + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_esi + insert_coma + stdcall insert_text_prop, ebx,5 ;button color + insert_nl + + insert_tab + stdcall insert_text, txt_i_40 + insert_nl + @@: + cmp byte[ebx],C_RE + jne @f + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_eax + insert_coma + stdcall insert_text, txt_1 + stdcall insert_text, txt_3 + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_ebx + insert_coma + stdcall insert_text_prop, ebx,1 + insert_i65p + stdcall insert_text_prop, ebx,3 + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_ecx + insert_coma + stdcall insert_text_prop, ebx,2 + insert_i65p + stdcall insert_text_prop, ebx,4 + insert_nl + + insert_tab + stdcall insert_text, txt_mov + insert_reg txt_edx + insert_coma + stdcall insert_text_prop, ebx,0 ;rect color + insert_nl + + insert_tab + stdcall insert_text, txt_i_40 + insert_nl + @@: + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє + + jmp .beg_iterat + .find_no: + popad + ret +endp + + + +align 4 +proc get_code_struct, p_obj:dword + pushad + mov ebx,dword[p_obj] + ;0 - name + + stdcall [ted_text_add], tedit0,txt_struct,7,ted_opt_ed_move_cursor + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_nl + + popad + ret +endp + +;ёючфрЄ№ ъюф юс· тыхэш  яхЁхьхээющ +align 4 +proc get_code_variable, p_obj:dword,o_lev:dword + pushad + mov ebx,dword[p_obj] + ;0,1,2 - name,value,comment + + mov ecx,dword[o_lev] + cmp cl,0 + je .no_tab ;шчсхурхь чрЎшъыштрэш  (0-1 = 2^32-1) + and cx,0xff + cld + @@: + insert_tab ;ЇюЁьшЁютрэшх юЄёЄєяр яхЁхф яхЁхьхээющ + loop @b + .no_tab: + + stdcall get_obj_text_col,ebx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_sp + + mov ecx,dword[ebx+u_object.typid-u_object] ;ecx - юЄэюёшЄхы№э√щ шэфхъё ЁюфшЄхы№ёъюую юс·хъЄр (т ярь Єш) + xor eax,eax + mov ax,[tree2.info_size] + imul ecx,eax ;єьэюцрхь шэфхъё эр ЁрчьхЁ ёЄЁєъЄєЁ√ + add ecx,[tree2.data_info] ;ecx - єърчрЄхы№ фрээ√х ЁюфшЄхы№ёъюую єчыр + + ;яЁютхЁъє эр яЁртшы№эюёЄ№ ecx ??? + + stdcall get_obj_text_col,ecx,0 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + insert_sp + + stdcall get_obj_text_col,ebx,1 + stdcall str_len,edx + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + + stdcall get_obj_text_col,ebx,2 + stdcall str_len,edx + cmp eax,1 + jl @f + insert_sp + insert_com + stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor + @@: + insert_nl + + popad + ret +endp + + + +;--- ЄхъёЄют√х ъюэёЄрэЄ√ --- +txt_coma db ',',0 +txt_i_40 db 'int 0x40',13,0 +txt_0 db '0',0 +txt_1 db '1',0 +txt_2 db '2',0 +txt_3 db '3',0 +txt_4 db '4',0 +txt_8 db '8',0 +txt_plus db '+',0 +txt_nl db 13,0 +txt_com db ';',0 +txt_sp db ' ',0 +txt_tab db 9,0 +txt_br db '\',13,9,0 +txt_txt: + db 'txt_',0 +txt_db: + db ' db ',0 +txt_mouse_dd: + db ', mouse_dd, ',0 +txt_times: + db ':',13,9,'times ',0 +txt_draw_wb: + db 13,'align 4',13,'draw_window:',13,'pushad',13,9,'mcall 12,1',13,0 +txt_draw_we: + db 9,'mcall 12,2',13,'popad',13,9,'ret',13,0 +txt_but_create db '0x40000000',0 ;tmp +txt_0x33000000 db '0x33000000',0 ;tmp +txt_struct db 'struct ',0 +txt_ends db 'ends',13,13,0 +txt_mov db 'mov ',0 +txt_xor db 'xor ',0 +txt_or db 'or ',0 +txt_cmp db 'cmp ',0 +txt_call db 'call ',0 +txt_jne_f db 'jne @f',0 +txt_a_met db '@@:',0 +txt_ah db 'ah',0 +txt_eax db 'eax',0 +txt_ebx db 'ebx',0 +txt_ecx db 'ecx',0 +txt_edx db 'edx',0 +txt_edi db 'edi',0 +txt_esi db 'esi',0 +txt_align_4 db 'align 4',13,0 +txt_d_poi db ':',0 +txt_ret db 'ret',13,0 +txt_i65p db '*65536+',0 +txt_std_mouse_ed: + db 9,'stdcall [edit_box_mouse], ',0 +txt_std_mouse_cb: + db 9,'stdcall [check_box_mouse], ',0 +txt_std_key_ed: + db 9,'stdcall [edit_box_key], ',0 +txt_incl: + db 'include ',0 +txt_ebox: + db ' edit_box' + .end: db 0 +txt_editb_draw: + db 9,'stdcall [edit_box_draw], ',0 +txt_cbox_draw: + db 9,'stdcall [check_box_draw], ',0 + +txt_but_1: +db 'align 4',13,'button:',13,9,'mcall 17',13 +txt_but_2: +db 9,'cmp ah,1',13,9,'jne still',13,'.exit:',13,9,'mcall -1',13 +txt_but_3: + +txt_key_1: +db 'align 4',13,'key:',13,9,'mcall 2',13 +txt_key_2: +db 9,'jmp still',13 +txt_key_3: + +align 4 +proc get_obj_id, p_obj:dword, txt_buf:dword + push eax ecx edx + mov eax,dword[p_obj] + sub eax,[tree2.data_info] + xor edx,edx + xor ecx,ecx + mov cx,word[tree2.info_size] + div ecx + + mov edx,dword[txt_buf] + mov byte[edx],0 + stdcall str_cat_value,edx,eax + pop edx ecx eax + ret +endp + +;--- ЄхъёЄют√х ЇєэъЎшш --- + +align 4 +proc mem_clear, mem:dword, len:dword + push eax ecx edi + cld + xor al,al + mov edi, dword[mem] + mov ecx, dword[len] + repne stosb + pop edi ecx eax + ret +endp + +align 4 +proc str_cat, str1:dword, str2:dword + push eax ecx edi esi + mov esi,dword[str2] + stdcall str_len,esi + mov ecx,eax + inc ecx + mov edi,dword[str1] + stdcall str_len,edi + add edi,eax + cld + repne movsb + pop esi edi ecx eax + ret +endp + +align 4 +proc str_cat_value, str1:dword, value:dword + pushad + mov edi,[str1] + stdcall str_len,edi + add edi,eax + mov eax,[value] + call tl_convert_to_str + popad + ret +endp + +;output: +; eax = strlen +align 4 +proc str_len, str1:dword + mov eax,[str1] + @@: + cmp byte[eax],0 + je @f + inc eax + jmp @b + @@: + sub eax,[str1] + ret +endp + +;input: +; eax = value +; edi = string buffer +align 4 +tl_convert_to_str: + pushad + stdcall mem_clear,edi,12 + call .str + popad + ret + +align 4 +.str: + mov ecx,0x0a ;чрфрхЄё  ёшёЄхьр ёўшёыхэш  шчьхэ ■Єё  ЁхушёЄЁ√ ebx,eax,ecx,edx тїюфэ√х ярЁрьхЄЁ√ eax - ўшёыю + ;яЁхЁхтюф ўшёыр т ASCII ёЄЁюъє тїюфэ√х фрээ√х ecx=ёшёЄхьр ёўшёыхэ  edi рфЁхё ъєфр чряшё√трЄ№, сєфхь ёЄЁюъє, яЁшўхь ъюэхЎ яхЁхьхээющ + cmp eax,ecx ;ёЁртэшЄ№ хёыш т eax ьхэ№°х ўхь т ecx Єю яхЁхщЄш эр @@-1 Є.х. эр pop eax + jb @f + xor edx,edx ;юўшёЄшЄ№ edx + div ecx ;ЁрчфхышЄ№ - юёЄрЄюъ т edx + push edx ;яюыюцшЄ№ т ёЄхъ + ;dec edi ;ёьх∙хэшх эхюсїюфшьюх фы  чряшёш ё ъюэЎр ёЄЁюъш + call .str ;яхЁхщЄш эр ёрьє ёхс  Є.х. т√чтрЄ№ ёрьє ёхс  ш Єръ фю Єюую ьюьхэЄр яюър т eax эх ёЄрэхЄ ьхэ№°х ўхь т ecx + pop eax + @@: ;cmp al,10 ;яЁютхЁшЄ№ эх ьхэ№°х ыш чэрўхэшх т al ўхь 10 (фы  ёшёЄхь√ ёўшёыхэ  10 фрээр  ъюьрэфр - ыш°эр )) + or al,0x30 ;фрээр  ъюьрэфр ъюЁюўх ўхь фтх т√°х + stosb ;чряшёрЄ№ ¤ыхьхэЄ шч ЁхушёЄЁр al т  ўхъє ярь Єш es:edi + ret \ No newline at end of file diff --git a/programs/develop/kol_f_edit/ced_constr.inc b/programs/develop/kol_f_edit/ced_constr.inc new file mode 100644 index 0000000000..3e00b4f7bf --- /dev/null +++ b/programs/develop/kol_f_edit/ced_constr.inc @@ -0,0 +1,321 @@ +; +; в этом файле собраны функции рисующие окно конструктора +; + +macro move_to_skin coord_x,coord_y +{ + add coord_x,SKIN_W1 + add coord_y,SKIN_H +} + +;перерисовка окна конструктора +align 4 +draw_constructor: + stdcall [buf2d_clear], buf_fon,0xffffff + +pushad + cmp [err_ini1],1 + jne @f + stdcall [buf2d_draw_text], buf_fon, buf_font,txtErrIni1,10,10,\ + 0xff0000 ;рисуем строку с текстом + stdcall [buf2d_draw_text], buf_fon, buf_font,fp_obj_opt,10,20,\ + 0xff0000 ;рисуем строку с текстом + jmp .end_draw + @@: + + xor edx,edx + mov dl,C_WI + stdcall find_obj_in_file,edx ;eax - указатель на структуру окна + cmp eax,0 + je .end_draw + mov dword[obj_m_win],eax + + ;4-width + stdcall get_obj_text_col,[obj_m_win],4 ;edx = offset + stdcall conv_str_to_int,edx + mov ecx,eax ;ecx=width + + ;5-height + stdcall get_obj_text_col,[obj_m_win],5 ;edx = offset + stdcall conv_str_to_int,edx + ;eax=height + + stdcall [buf2d_rect_by_size], buf_fon, 0,0,ecx,eax, dword[sc.frame] ;рисуем внешнюю рамку окна + sub eax,2 + sub ecx,2 + stdcall [buf2d_filled_rect_by_size], buf_fon, 1,1,ecx,eax, dword[sc.grab] ;рисуем фон рамки окна + + sub eax,6 + sub ecx,6 + stdcall [buf2d_rect_by_size], buf_fon, 4,4,ecx,eax, dword[sc.frame] ;рисуем внутреннюю рамку окна + sub eax,2 + sub ecx,2 + stdcall [buf2d_filled_rect_by_size], buf_fon, 5,5,ecx,eax, dword[sc.work] ;рисуем фон окна + +;---;---;--- +;jmp .end_skin +;---;---;--- + + stdcall get_obj_text_col,[obj_m_win],1 + stdcall conv_str_to_int,edx ;eax = window style + cmp eax,3 + jl .end_skin + stdcall [buf2d_bit_blt], buf_fon, 0,0, buf_skin1 ;левый скин + mov edi,buf_skin1 + mov eax,buf2d_w ;eax - позиция для рисования среднего скина + mov edi,buf_skin2 + mov ebx,buf2d_w ;ebx - ширина левого скина + sub ecx,ebx ;отнимаем от ширины окна ширину среднего скина + @@: + stdcall [buf2d_bit_blt], buf_fon, eax,0, buf_skin2 ;прорисовка среднего скина + add eax,ebx + cmp eax,ecx ;сравниваем позицию среднего скина с шириной окна + jl @b + + ;4-width + stdcall get_obj_text_col,[obj_m_win],4 ;edx = offset + stdcall conv_str_to_int,edx + mov edi,buf_skin3 + sub eax,buf2d_w ;отнимаем ширину правого скина + stdcall [buf2d_bit_blt], buf_fon, eax,0, buf_skin3 ;прорисовка правого скина + .end_skin: + + xor edx,edx ;рисуем графические элементы + mov dl,C_BU + stdcall draw_arr_objects, edx,draw_obj_but + mov dl,C_ED + stdcall draw_arr_objects, edx,draw_obj_edit + mov dl,C_CB + stdcall draw_arr_objects, edx,draw_obj_check + mov dl,C_DT + stdcall draw_arr_objects, edx,draw_obj_text + mov dl,C_RE + stdcall draw_arr_objects, edx,draw_obj_rect_f13 + + .end_draw: +popad + ret + +;функция рисует массивы определенных элементов +align 4 +proc draw_arr_objects, obj_t:dword,p_fun_draw:dword +push eax ebx + stdcall find_obj_in_file,[obj_t] ;eax - указатель на структуру объекта + cmp eax,0 + je .end_draw_o + mov ebx,[p_fun_draw] + stdcall ebx,eax + @@: + stdcall find_obj_in_file_next,[obj_t] ;eax - указатель на структуру объекта + cmp eax,0 + je .end_draw_o + stdcall ebx,eax + jmp @b + .end_draw_o: +pop ebx eax + ret +endp + +;функция рисует объект кнопки, в окне конструктора +align 4 +proc draw_obj_but, p_obj:dword +locals + coor_x dd ? + coor_y dd ? +endl + pushad + mov ebx,dword[p_obj] + ;1,2,3,4,5 - x,y,w,h,color + + stdcall get_obj_text_col,ebx,1 + stdcall conv_str_to_int,edx + mov [coor_x],eax + stdcall get_obj_text_col,ebx,2 + stdcall conv_str_to_int,edx + mov [coor_y],eax + move_to_skin [coor_x],[coor_y] + stdcall get_obj_text_col,ebx,3 + stdcall conv_str_to_int,edx + mov edi,eax + stdcall get_obj_text_col,ebx,4 + stdcall conv_str_to_int,edx + mov ecx,eax + stdcall get_obj_text_col,ebx,5 + stdcall conv_str_to_int,edx + stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],edi,ecx,eax + popad + ret +endp + +;функция рисует объект текстового поля, в окне конструктора +align 4 +proc draw_obj_edit, p_obj:dword +locals + coor_x dd ? + coor_y dd ? + col_txt dd ? ;цвет тектса +endl + pushad + mov ebx,dword[p_obj] + ;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt + + stdcall get_obj_text_col,ebx,2 + stdcall conv_str_to_int,edx + mov [coor_x],eax + stdcall get_obj_text_col,ebx,3 + stdcall conv_str_to_int,edx + mov [coor_y],eax + move_to_skin [coor_x],[coor_y] + stdcall get_obj_text_col,ebx,1 + stdcall conv_str_to_int,edx + mov ecx,eax + stdcall get_obj_text_col,ebx,6 + stdcall conv_str_to_int,edx + stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\ + ecx,15, eax + + inc dword[coor_x] + inc dword[coor_y] + sub ecx,2 + stdcall get_obj_text_col,ebx,4 + stdcall conv_str_to_int,edx + stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\ + ecx,13, eax + + stdcall get_obj_text_col,ebx,8 + stdcall conv_str_to_int,edx + mov [col_txt],eax + add [coor_x],2-1 ;смещаем координату, что-бы + add [coor_y],4-1 ;текст был в поле выровнен + stdcall get_obj_text_col,ebx,10 + stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\ + dword[col_txt] ;рисуем строку с текстом + + popad + ret +endp + +;функция рисует объект флажка, в окне конструктора +align 4 +proc draw_obj_check, p_obj:dword +locals + coor_x dd ? + coor_y dd ? + ot_txt dd ? ;отступ для текста + size_wh dd ? ;размер квадратика + col_txt dd ? ;цвет тектса +endl + pushad + mov ebx,dword[p_obj] + ;1,2,3, 4,5,6, 7,8 - x,y,txt, col_fon,col_frame,col_txt, w_txt,w_h + + stdcall get_obj_text_col,ebx,1 + stdcall conv_str_to_int,edx + mov [coor_x],eax + stdcall get_obj_text_col,ebx,2 + stdcall conv_str_to_int,edx + mov [coor_y],eax + move_to_skin [coor_x],[coor_y] + stdcall get_obj_text_col,ebx,7 + stdcall conv_str_to_int,edx + mov [ot_txt],eax + stdcall get_obj_text_col,ebx,8 + stdcall conv_str_to_int,edx + dec eax ;размер меньше на 1 пиксель + mov [size_wh],eax + stdcall get_obj_text_col,ebx,5 + stdcall conv_str_to_int,edx + stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\ + dword[size_wh],dword[size_wh], eax + + inc dword[coor_x] + inc dword[coor_y] + sub dword[size_wh],2 + stdcall get_obj_text_col,ebx,4 + stdcall conv_str_to_int,edx + stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\ + dword[size_wh],dword[size_wh], eax + + stdcall get_obj_text_col,ebx,6 + stdcall conv_str_to_int,edx + mov [col_txt],eax + mov eax,[ot_txt] + add eax,[size_wh] + add eax,2-1 ;sub dword[size_wh],2 ;inc dword[coor_x] + add [coor_x],eax ;вычисляем координаты для текстовой подписи + add [coor_y],5-1 ;inc dword[coor_y] + stdcall get_obj_text_col,ebx,3 + stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\ + dword[col_txt] ;рисуем строку с текстом + popad + ret +endp + +;функция рисует объект текстовой подписи, в окне конструктора +align 4 +proc draw_obj_text, p_obj:dword +locals + coor_x dd ? + coor_y dd ? + col_txt dd ? ;цвет тектса +endl + pushad + mov ebx,dword[p_obj] + ;0,1,2,3,... - txt,x,y,col_txt,... + + stdcall get_obj_text_col,ebx,1 + stdcall conv_str_to_int,edx + mov [coor_x],eax + stdcall get_obj_text_col,ebx,2 + stdcall conv_str_to_int,edx + mov [coor_y],eax + move_to_skin [coor_x],[coor_y] + + stdcall get_obj_text_col,ebx,3 + stdcall conv_str_to_int,edx + mov [col_txt],eax + + stdcall get_obj_text_col,ebx,0 + stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\ + dword[col_txt] ;рисуем строку с текстом + popad + ret +endp + +;функция рисует объект прямоугольника (сисит. ф. 13) +align 4 +proc draw_obj_rect_f13, p_obj:dword +locals + coor_x dd ? + coor_y dd ? + color dd ? ;цвет тектса +endl + pushad + mov ebx,dword[p_obj] + ;0,1,2,3,4 - color,x,y,w,h + + stdcall get_obj_text_col,ebx,1 + stdcall conv_str_to_int,edx + mov [coor_x],eax + stdcall get_obj_text_col,ebx,2 + stdcall conv_str_to_int,edx + mov [coor_y],eax + move_to_skin [coor_x],[coor_y] + + stdcall get_obj_text_col,ebx,0 + stdcall conv_str_to_int,edx + mov [color],eax + + stdcall get_obj_text_col,ebx,3 + stdcall conv_str_to_int,edx + mov ecx,eax + + stdcall get_obj_text_col,ebx,4 + stdcall conv_str_to_int,edx + mov esi,eax + + stdcall [buf2d_filled_rect_by_size], buf_fon,\ + dword[coor_x],dword[coor_y],ecx,esi,dword[color] + popad + ret +endp diff --git a/programs/develop/kol_f_edit/ced_view.asm b/programs/develop/kol_f_edit/ced_view.asm new file mode 100644 index 0000000000..9b7550cb8e --- /dev/null +++ b/programs/develop/kol_f_edit/ced_view.asm @@ -0,0 +1,1314 @@ +use32 + org 0x0 + db 'MENUET01' + dd 0x1 + dd start + dd i_end + dd mem + dd stacktop + dd buf_cmd_lin + dd sys_path + +include '../../macros.inc' +include '../../proc32.inc' +include '../../develop/libraries/box_lib/load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include 'mem.inc' +include 'dll.inc' +include 'strlen.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +hed db 'kol_f_edit 11.11.10',0 + +BUF_STRUCT_SIZE equ 21 +buf2d_data equ dword[edi] ;данные буфера изображения +buf2d_w equ dword[edi+8] ;ширина буфера +buf2d_h equ dword[edi+12] ;высота буфера +buf2d_l equ word[edi+4] ;отступ слева +buf2d_t equ word[edi+6] ;отступ сверху +buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера +buf2d_color equ dword[edi+16] ;цвет фона буфера +buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения + +MAX_LEN_OBJ_TXT equ 200 +MAX_CED_OBJECTS equ 200 +MAX_OPT_FIELDS equ 11 +MAX_OBJ_TYPES equ 16 +WND_CAPT_COLOR equ 0xb0d0ff +BUF_SIZE equ 1000 + +C_AC equ 'a' ;автоматические коды (auto code) +C_ST equ 's' ;struct +C_IN equ '#' ;include +C_TT equ 'd' ;блок кода (данных) +C_VR equ '-' ;переменная +C_CO equ ';' ;комментарий +C_WI equ 'w' ;окно +C_CB equ 'c' ;CheckBox +C_OP equ 'o' ;OptionBox +C_ED equ 'e' ;EditBox +C_BU equ 'b' ;Button +C_DT equ 'x' ;рисовать текст +C_RE equ 'r' ;рисовать прямоугольник +C_KE equ 'k' ;клавиатура + +;modif +CPP_MOD_ACM equ 2 ;события мыши +BIT_MOD_ACM equ 1 ;события мыши +CPP_MOD_ACD equ 8 ;данные объектов +BIT_MOD_ACD equ 3 ;данные объектов +CPP_MOD_ABU equ 16 ;связывание кнопок +BIT_MOD_ABU equ 4 ;связывание кнопок + +macro load_image_file path,buf,size ;макрос для загрузки изображений +{ + copy_path path,sys_path,fp_icon,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov eax,70 ;70-я функция работа с файлами + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], [buf] + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], fp_icon + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall dword[img_decode], dword[buf],ebx,0 + mov dword[image_data],eax + ;преобразуем изображение к формату rgb + stdcall dword[img_to_rgb2], dword[image_data],dword[buf] + ;удаляем временный буфер image_data + stdcall dword[img_destroy], dword[image_data] + @@: +} + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + rezerv db ? + FileName dd ? +ends + +struct object + c db ? + txt rb MAX_LEN_OBJ_TXT + lvl db 0 + clo db 0 + perv dd ? + next dd ? + typid dd ? + tc dd ? + td dd ? + modif dd ? +ends + +struct ObjOpt + c db ? + bl_type db ? + graph db ? + info rb 30 + caption rb 200 + Col rw MAX_OPT_FIELDS + img rw MAX_OPT_FIELDS ;индексы картинок (в файле 'icon.bmp') +ends + +SKIN_H equ 22 +SKIN_W1 equ 5 +SKIN_W2 equ 7 +SKIN_W3 equ 23 +fn_skin_1 db 'left.bmp',0 +fn_skin_2 db 'base.bmp',0 +fn_skin_3 db 'oper.bmp',0 +IMAGE_FILE_SKIN1_SIZE equ 3*(SKIN_W1+3)*SKIN_H+54 +IMAGE_FILE_SKIN2_SIZE equ 3*(SKIN_W2+3)*SKIN_H+54 +IMAGE_FILE_SKIN3_SIZE equ 3*(SKIN_W3+3)*SKIN_H+54 + +fn_font_s1 db 'font6x9.bmp',0 +IMAGE_FILE_FONT1_SIZE equ 96*144*3 ;размер файла с 1-м системным шрифтом + +fn_icon db 'icon.bmp',0 +bmp_icon rb 0x300*30 + +fn_icon_tl_sys db 'tl_sys_16.png',0 +TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками +icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок +icon_font_s1 dd 0 ;указатель на временную память для загрузки шрифта + +fn_syntax db 'asm.syn',0 ;имя загружаемого файла синтаксиса + +include 'ced_wnd_m.inc' +include 'ced_constr.inc' ;файл с функциями окна конструктора +include 'ced_code_g.inc' ;файл с функциями генерирования кодов + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась наша либа + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib1 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib2 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib3 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + + mov eax,[wndObjI.top] + add eax,[recMain.top] + inc eax + mov edi,edit2 + @@: + mov ed_top,eax + add edi,ed_struc_size + add eax,[recMain.height] + cmp edi,prop_wnd_edits_end + jl @b + + stdcall [buf2d_create], buf_fon + + mcall 48,3,sc,sizeof.system_colors + mcall 40,0x27 + + stdcall dword[tl_data_init], tree1 + stdcall dword[tl_data_init], tree2 + + copy_path fn_icon,sys_path,fp_icon,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + mov eax,70 ;load icon file + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 54 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], 0x300*30 + mov [run_file_70.Buffer], bmp_icon + mov [run_file_70.rezerv], 0 + mov [run_file_70.FileName], fp_icon + mov ebx,run_file_70 + int 0x40 + + cmp ebx,-1 + mov [err_ini0],1 + je @f ;if open file + mov [err_ini0],0 + mov dword[tree1.data_img],bmp_icon + mov dword[tree2.data_img],bmp_icon + @@: + + ;системные иконки 16*16 для tree_list + load_image_file fn_icon_tl_sys, icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE + ;если изображение не открылось, то в icon_tl_sys будут + ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера + m2m dword[tree1.data_img_sys],dword[icon_tl_sys] + m2m dword[tree2.data_img_sys],dword[icon_tl_sys] + + ;1-й файл скина + load_image_file fn_skin_1, icon_font_s1,IMAGE_FILE_SKIN1_SIZE + stdcall [buf2d_create_f_img], buf_skin1,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + ;2-й файл скина + load_image_file fn_skin_2, icon_font_s1,IMAGE_FILE_SKIN2_SIZE + stdcall [buf2d_create_f_img], buf_skin2,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + ;3-й файл скина + load_image_file fn_skin_3, icon_font_s1,IMAGE_FILE_SKIN3_SIZE + stdcall [buf2d_create_f_img], buf_skin3,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + + ;символы 1-го системного шрифта + load_image_file fn_font_s1, icon_font_s1,IMAGE_FILE_FONT1_SIZE + stdcall [buf2d_create_f_img], buf_font,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_font + + + copy_path fn_obj_opt,sys_path,fp_obj_opt,0x0 + ;load options file + mov eax,70 + mov [run_file_70.Position], 0 + mov [run_file_70.Count], sizeof.ObjOpt*MAX_OBJ_TYPES + mov [run_file_70.Buffer], obj_opt + mov [run_file_70.FileName], fp_obj_opt + mov ebx,run_file_70 + int 0x40 + + cmp ebx,-1 + mov [err_ini1],1 + je .open_end ;jmp if not open file + mov [err_ini1],0 + + mov eax,obj_opt ;добавляем объекты + @@: + mov bl,byte[eax] + cmp bl,0 + je @f + ;xor ecx,ecx ;в ecx будет индекс иконки + mov cx,word[eax+sizeof.ObjOpt-2*MAX_OPT_FIELDS] + cmp cx,0 + jge .zero + xor cx,cx ;что-бы не глючило с отрицательным индексом + .zero: + shl ecx,16 + stdcall dword[tl_node_add], eax, ecx, tree1 ;добавляем название объекта + stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок + add eax,sizeof.ObjOpt ;переход на следующий объект + jmp @b + @@: + stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх + + .open_end: + + stdcall [ted_init], tedit0 + copy_path fn_syntax,sys_path,fp_icon,0x0 + stdcall [ted_init_syntax_file], tedit0,run_file_70,fp_icon + ;mov edi,tedit0 + ;call [ted_text_colored] + + ;get cmd line + cmp [buf_cmd_lin],0 + je @f ;if file names exist + mov esi,buf_cmd_lin + call strlen ;eax=strlen + mov edi,[edit1.text] + mov [edit1.size],eax + mov ecx,eax + rep movsb + call but_open + @@: + + + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 10 + + cmp al,1 + jne @f + call draw_window + @@: + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jne @f + call mouse + @@: + + jmp still + +align 4 +draw_window: +pushad + mcall 12,1 + + xor eax,eax + mov ebx,20*65536+670 + mov ecx,20*65536+370 + mov edx,[sc.work] + or edx,0x33000000 + mov edi,hed + mcall + + mov eax,8 ;button 'Open' + mov esi,0x80ff + mov ebx,230*65536+70 + mov ecx,5*65536+22 + mov edx,5 + mcall + + ;button 'Show Constructor' + mov ebx,310*65536+18 + mov ecx,5*65536+18 + mov edx,11 + mcall + stdcall draw_icon, 12,311,6 ;12 - window icon + + ;button 'Show Code' + mov ebx,330*65536+18 + mov edx,12 + mcall + stdcall draw_icon, 11,331,6 ;11 - text icon + + ;button 'Update Code' + mov ebx,350*65536+18 + mov edx,13 + mcall + + ;button 'Save Code' + mov ebx,370*65536+18 + mov edx,14 + mcall + stdcall draw_icon, 17,371,6 ;17 - save icon + + ;button ']P' + mov ebx,390*65536+18 + mov edx,15 + mcall + stdcall draw_icon, 18,391,6 ;18 - знак конца абзаца + + ;button 'Show color text' + mov ebx,410*65536+18 + mov edx,16 + mcall + stdcall draw_icon, 19,411,6 + +; 10 30 50 70 90 + + mov eax,4 ;подпись 'Открыть' + mov ebx,245*65536+13 + mov ecx,0x80ffff00 + mov edx,txtOpen + mcall + + cmp [err_opn],1 + jne @f + ;mov eax,4 + mov ebx,10*65536+35 + mov ecx,0x80ff0000 + mov edx,txtErrOpen + mcall + @@: + + cmp [err_ini0],1 + je err_init_icon + cmp [err_ini1],1 + je err_init_icon + call draw_obj_info ;окно редактирования выбранного объекта + err_init_icon: + + stdcall [edit_box_draw], dword edit1 + stdcall [edit_box_draw], dword edit_sav + stdcall [tl_draw],dword tree1 + mov dword[w_scr_t1.all_redraw],1 + stdcall [scrollbar_ver_draw],dword w_scr_t1 + stdcall [tl_draw],dword tree2 + mov dword[w_scr_t2.all_redraw],1 + stdcall [scrollbar_ver_draw],dword w_scr_t2 + + cmp byte[show_mode],0 ;условие видимости окна конструктора + jne @f + stdcall [buf2d_draw], buf_fon + @@: + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw], tedit0 + @@: + mcall 12,2 +popad + ret + +align 4 +mouse: + stdcall [edit_box_mouse], dword edit1 + stdcall [edit_box_mouse], dword edit2 + stdcall [edit_box_mouse], dword edit3 + stdcall [edit_box_mouse], dword edit4 + stdcall [edit_box_mouse], dword edit5 + stdcall [edit_box_mouse], dword edit6 + stdcall [edit_box_mouse], dword edit7 + stdcall [edit_box_mouse], dword edit8 + stdcall [edit_box_mouse], dword edit9 + stdcall [edit_box_mouse], dword edit_sav + stdcall [tl_mouse], dword tree1 + stdcall [tl_mouse], dword tree2 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_mouse], tedit0 + @@: + ret + + +align 4 +key: + mcall 2 + stdcall [edit_box_key], dword edit1 + stdcall [edit_box_key], dword edit2 + stdcall [edit_box_key], dword edit3 + stdcall [edit_box_key], dword edit4 + stdcall [edit_box_key], dword edit5 + stdcall [edit_box_key], dword edit6 + stdcall [edit_box_key], dword edit7 + stdcall [edit_box_key], dword edit8 + stdcall [edit_box_key], dword edit9 + stdcall [edit_box_key], dword edit_sav + stdcall [tl_key], dword tree1 + stdcall [tl_key], dword tree2 + +; cmp ah,178 ;Up +; jne @f +; cmp [cur_y],0 +; je @f +; dec [cur_y] +; call get_obj_pos +; call draw_window +; @@: + + jmp still + +align 4 +button: + mcall 17 + cmp ah,5 + jne @f + call but_open + @@: + cmp ah,10 + jne @f + call but_element_change + @@: + cmp ah,11 + jne @f + call but_show_constructor + @@: + cmp ah,12 + jne @f + call but_show_code + @@: + cmp ah,13 + jne @f + call but_code_gen + @@: + cmp ah,14 + jne @f + call but_save_asm + @@: + cmp ah,15 + jne @f + call but_show_invis + @@: + cmp ah,16 + jne @f + call but_show_syntax + @@: + cmp ah,1 + jne still +.exit: + stdcall mem.Free,[icon_tl_sys] + mov dword[tree1.data_img],0 + mov dword[tree2.data_img],0 + mov dword[tree1.data_img_sys],0 + mov dword[tree2.data_img_sys],0 + stdcall dword[tl_data_clear], tree1 + stdcall dword[tl_data_clear], tree2 + stdcall [buf2d_delete],buf_fon ;удаляем буфер + stdcall [buf2d_delete],buf_font ;удаляем буфер + stdcall [buf2d_delete],buf_skin1 + stdcall [buf2d_delete],buf_skin2 + stdcall [buf2d_delete],buf_skin3 + stdcall [ted_delete], tedit0 + mcall -1 + +align 4 +but_open: + pushad + mov eax,70 + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], sizeof.object*MAX_CED_OBJECTS + mov [run_file_70.Buffer], ced_info + mov [run_file_70.rezerv], 0 + push [edit1.text] + pop [run_file_70.FileName] + mov ebx,run_file_70 + int 0x40 + + cmp ebx,-1 + mov [err_opn],1 + je .open_end ;if open file + mov ecx,ced_info + add ecx,ebx + mov byte [ecx],0 + mov [err_opn],0 + + stdcall dword[tl_info_clear], tree2 + mov eax,ced_info ;добавляем объекты + @@: + mov bl,byte[eax] + cmp bl,0 + je @f + + call find_obj_in_opt ;edi = pointer to ObjOpt struct + + mov cx,word[edi+sizeof.ObjOpt-2*MAX_OPT_FIELDS] + cmp cx,0 + jge .zero + xor cx,cx ;что-бы не глючило с отрицательным индексом + .zero: + shl ecx,16 ;в ecx индекс иконки + mov cl,byte[eax+1+MAX_LEN_OBJ_TXT] ;уровень объекта + stdcall dword[tl_node_add], eax, ecx, tree2 ;добавляем объект + stdcall dword[tl_cur_next], tree2 ;переносим курсор вниз, что-бы не поменялся порядок + add eax,sizeof.object ;переход на следующий объект + jmp @b + @@: + stdcall dword[tl_cur_beg], tree2 ;переносим курсор вверх + + mov [foc_obj],0 + call draw_constructor + call code_gen + .open_end: + call draw_window ;перерисовка окна идет в любом случае, даже если файл не открылся + popad + ret + +;функция для сохранения созданного asm файла +align 4 +but_save_asm: + ;stdcall [ted_but_save_file], tedit0,run_file_70,[edit_sav.text] + push edi + mov edi, tedit0 + + stdcall [ted_but_save_file],edi,run_file_70,[edit_sav.text] + cmp ted_err_save,0 + jne @f + stdcall [mb_create],msgbox_1,thread ;message: Файл был сохранен + @@: + pop edi + ret + +;функция для показа/скрытия невидимых символов +align 4 +but_show_invis: + push edi + mov edi,tedit0 + + xor ted_mode_invis,1 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw],edi + @@: + pop edi + ret + +; +align 4 +but_show_syntax: + push edi + mov edi,tedit0 + + xor ted_mode_color,1 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw],edi + @@: + pop edi + ret + +align 4 +ted_save_err_msg: + mov byte[msgbox_0.err],al + stdcall [mb_create],msgbox_0,thread ;message: Can-t save text file! + ret + +;функция вызываемая при нажатии Enter в окне tree2 +;обновляет текстовые поля значениями параметров взятых из объектов +;функция обратная к данной but_element_change +align 4 +on_file_object_select: + stdcall [tl_node_get_data], tree2 + pop dword[foc_obj] + cmp dword[foc_obj],0 + je @f + stdcall set_obj_win_param, 0,edit2 + stdcall set_obj_win_param, 1,edit3 + stdcall set_obj_win_param, 2,edit4 + stdcall set_obj_win_param, 3,edit5 + stdcall set_obj_win_param, 4,edit6 + stdcall set_obj_win_param, 5,edit7 + stdcall set_obj_win_param, 6,edit8 + stdcall set_obj_win_param, 7,edit9 + @@: + call draw_window + ret + +;функция вызываемая при нажатии Enter в окне tree1 +;добавляет новый объект в окно tree2 +align 4 +on_add_object: +push eax ebx ecx + stdcall [tl_node_get_data], tree1 + pop eax + cmp eax,0 + je @f + ;mov bl,byte[eax] + ;call find_obj_in_opt + xor ecx,ecx + mov cx,word[eax+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта + ;mov cx,word[edi+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта + shl ecx,16 + stdcall dword[tl_node_add], eax, ecx, tree2 ;добавляем объект + @@: +pop ecx ebx eax + call draw_window + ret + +align 4 +proc set_obj_win_param, col:dword, edit:dword + pushad + stdcall get_obj_text_col, [foc_obj], [col] + stdcall get_obj_text_len_col, [foc_obj], [col] ;eax - длинна поля + mov edi,[edit] + cmp eax,1 + jl @f + dec eax + mov ed_max,eax ;ed_max = edi+.max + stdcall [edit_box_set_text], edi,edx ;обновляем editbox + jmp .end_f + @@: + mov ed_max,dword MAX_LEN_OBJ_TXT + stdcall [edit_box_set_text], edi,txt_null + .end_f: + popad + ret +endp + +align 4 +but_ctrl_o: + ret +align 4 +but_ctrl_n: + ret +align 4 +but_ctrl_s: + ret + +align 4 +buf_fon: ;фоновый буфер + dd 0 ;указатель на буфер изображения + dw 310 ;+4 left + dw 50 ;+6 top + dd 340 ;+8 w + dd 280 ;+12 h + dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_font: ;буфер матрицы со шрифтом + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 96 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_skin1: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W1 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel +align 4 +buf_skin2: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W2 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel +align 4 +buf_skin3: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W3 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +show_mode db 0 ;режим для показа определенного окна +txtOpen db 'Открыть',0 +txtErrOpen db 'Не найден файл, проверьте правильность имени',0 +txtErrIni1 db 'Не открылся файл с опциями',0 +err_opn db 0 +err_ini0 db 0 ;??? +err_ini1 db 0 + +edit1 edit_box 210, 10, 10, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text1, mouse_dd, 0, 7, 7 + +edit2 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text2, mouse_dd, 0 +edit3 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text3, mouse_dd, 0 +edit4 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text4, mouse_dd, 0 +edit5 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text5, mouse_dd, 0 +edit6 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text6, mouse_dd, 0 +edit7 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text7, mouse_dd, 0 +edit8 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text8, mouse_dd, 0 +edit9 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text9, mouse_dd, 0 +prop_wnd_edits_end: ;конец текстовых полей, отвечающих за свойства + +edit_sav edit_box 210, 310, 30, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text_sav, mouse_dd, 0 + + +ed_text1 db '/hd0/1/',0 + rb 295 +ed_text2 rb MAX_LEN_OBJ_TXT+2 +ed_text3 rb MAX_LEN_OBJ_TXT+2 +ed_text4 rb MAX_LEN_OBJ_TXT+2 +ed_text5 rb MAX_LEN_OBJ_TXT+2 +ed_text6 rb MAX_LEN_OBJ_TXT+2 +ed_text7 rb MAX_LEN_OBJ_TXT+2 +ed_text8 rb MAX_LEN_OBJ_TXT+2 +ed_text9 rb MAX_LEN_OBJ_TXT+2 +ed_text_sav rb 302 + +txt_null db 'null',0 +mouse_dd dd ? + +el_focus dd tree1 +;дерево со списком возможных типов объектов +tree1 tree_list sizeof.ObjOpt,20+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 10,50,125,100, 0,3,0, el_focus,\ + w_scr_t1,on_add_object +;дерево с объектами в пользовательском файле +tree2 tree_list sizeof.object,MAX_CED_OBJECTS+2, tl_draw_par_line,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 160,50,125,280, 13,1,MAX_LEN_OBJ_TXT, el_focus,\ + w_scr_t2,on_file_object_select + +msgbox_0: + db 1,0 + db 'Warning',0 + db 'Error saving file!',13,\ + 'Maybe the file name is not entered correctly.',13,\ + ' (error code =' + .err: db '?' + db ')',0 + db 'Close',0 + db 0 + +msgbox_1: + db 1,0 + db ':)',0 + db 'File was saved',0 + db 'Ok',0 + db 0 + +struct TexSelect + x0 dd ? + y0 dd ? + x1 dd ? + y1 dd ? +ends +;------------------------------------------------------------------------------ +align 4 +tedit0: ;структура текстового редактора + .wnd BOX 310,50,325,260 ;+ 0 + .rec BOX 30,13,7,10 ;+16 + .drag_m db 0 ;+32 выделение от мыши + .drag_k db 0 ;+33 выделение от клавиатуры + .sel TexSelect 0,0,0,0 ;+34 структура выделения + .seln TexSelect ;+50 дополнительная структура выделения + .tex dd 0 ;+66 text memory pointer + .tex_1 dd 0 ;+70 text first symbol pointer + .tex_end dd 0 ;+74 text end memory pointer + .cur_x dd 0 ;+78 координата x курсора + .cur_y dd 0 ;+82 координата y курсора + .max_chars dd 25002 ;+86 максимальное число символов в одном документе + .count_colors_text dd 1 ;+90 колличество цветов текста + .count_key_words dd 0 ;+94 колличество ключевых слов + .color_cursor dd 0xff0000 ;+98 цвет курсора + .color_wnd_capt dd 0x0080c0 ;+102 цвет полей вокруг окна + .color_wnd_work dd 0x0 ;+106 цвет фона окна + .color_wnd_bord dd 0xffffff ;+110 цвет текста на полях + .color_select dd 0x0000ff ;+114 цвет выделения + .color_cur_text dd 0xffff00 ;+118 цвет символа под курсором + .color_wnd_text dd 0x80ffff ;+122 цвет текста в окне + .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса + .syntax_file_size dd 55*1024 ;+130 максимальный размер файла синтаксиса + .text_colors dd 0 ;+134 указатель на массив цветов текста + .help_text_f1 dd 0 ;+138 указатель на текст справки (по нажатии F1) + .help_id dd -1 ;+142 идентификатор для справки + .key_words_data dd 0 ;+146 указатель на структуры ключевых слов TexColViv + .tim_ch dd ? ;+150 количество изменений в файле + .tim_undo dd ? ;+154 количество отмененных действий + .tim_ls dd ? ;+158 время последнего сохранения + .tim_co dd ? ;+162 время последней цветовой разметки + .el_focus dd el_focus ;+166 указатель на переменную элемента в фокусе + .err_save db 0 ;+170 ошибка сохранения файла + .panel_id db 0 ;+171 номер открытой панели + .key_new db 0 ;+172 символ, который будет добавлятся с клавиатуры + .symbol_new_line db 20 ;+173 символ завершения строки + .scr_w dd scrol_w1 ;+174 вертикальный скроллинг + .scr_h dd scrol_h1 ;+178 горизонтальный скроллинг + .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов + .buffer dd text_buffer ;+186 указатель на буфер копирования/вставки + .buffer_find dd 0 ;+190 указатель на буфер для поиска + .cur_ins db 1 ;+194 режим работы курсора (обычный или замена) + .mode_color db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.) + .mode_invis db 0 ;+196 режим показа непечатаемых символов + .gp_opt db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor + .fun_on_key_ctrl_o dd but_ctrl_o ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) + .fun_on_key_ctrl_f dd 0 ;+202 ... Ctrl+F (вызова/скрытия панели поиска) + .fun_on_key_ctrl_n dd but_ctrl_n ;+206 ... Ctrl+N (создание нового документа) + .fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S + .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки + .fun_find_err dd 0 ;+218 указатель на функцию вызываемую если поиск закончился неудачно + .fun_init_synt_err dd 0 ;+222 указатель на функцию вызываемую при ошибочном открытии файла синтаксиса + .fun_draw_panel_buttons dd 0 ;+226 указатель на функцию рисования панели с кнопками + .fun_draw_panel_find dd 0 ;+230 указатель на функцию рисования панели поиска + .fun_draw_panel_syntax dd 0 ;+234 указатель на функцию рисования панели синтаксиса + .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно + .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке + .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) +;------------------------------------------------------------------------------ +align 4 +scrol_w1: +.x: +.size_x dw 16 ;+0 +.start_x dw 85 ;+2 +.y: +.size_y dw 100 ; +4 +.start_y dw 15 ; +6 +.btn_high dd 15 ; +8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0x808080 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +;--------------------------------------------------------------------- +align 4 +scrol_h1: +.x: +.size_x dw 85 ;+0 +.start_x dw 30 ;+2 +.y: +.size_y dw 16 ;+4 +.start_y dw 100 ;+6 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0x808080 ;+36 +.redraw dd 0 ;+40 +.delta dw 0 ;+44 +.delta2 dw 0 ;+46 +.run_x: +.r_size_x dw 0 ;+48 +.r_start_x dw 0 ;+50 +.run_y: +.r_size_y dw 0 ;+52 +.r_start_y dw 0 ;+54 +.m_pos dd 0 ;+56 +.m_pos_2 dd 0 ;+60 +.m_keys dd 0 ;+64 +.run_size dd 0 ;+68 +.position2 dd 0 ;+72 +.work_size dd 0 ;+76 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + + + +align 4 +w_scr_t1: +.size_x dw 16 ;+0 +rb 2+2+2 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +rb 4+2+2 +.run_x: +rb 2+2+2+2+4+4+4+4+4+4 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +align 4 +w_scr_t2: +.size_x dw 16 ;+0 +rb 2+2+2 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +rb 4+2+2 +.run_x: +rb 2+2+2+2+4+4+4+4+4+4 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +data_of_code dd 0 +sc system_colors + +image_data dd 0 ;память для преобразования картинки функциями libimg + +recMain BOX 3,13,16,18 +ced_info object 0 ;on start == 0 + rb sizeof.object*(MAX_CED_OBJECTS-1) + +wndObjI BOX 10,160,125+16,170 +text_buffer db BUF_SIZE dup(0) +fn_obj_opt db 'ob_o.opt',0 +obj_opt ObjOpt + rb sizeof.ObjOpt*(MAX_OBJ_TYPES-1) + db 0 ;eof options + +cur_x dd 0 +cur_y dd 0 +foc_obj dd 0 ;объект в фокусе +obj_m_win dd 0 ;структура главного окна + +; +if 1 ;lang eq ru + + err_message_found_lib0 db 'Не найдена библиотека box_lib.obj',0 ;строка, которая будет в сформированном окне, если библиотека не будет найдена + err_message_import0 db 'Ошибка при импорте библиотеки box_lib.obj',0 + err_message_found_lib1 db 'Не найдена библиотека proc_lib.obj',0 + err_message_import1 db 'Ошибка при импорте библиотеки proc_lib.obj',0 + err_message_found_lib2 db 'Не удалось найти библиотеку buf2d.obj',0 + err_message_import2 db 'Ошибка при импорте библиотеки buf2d.obj',0 + err_message_found_lib3 db 'Не удалось найти библиотеку libimg.obj',0 + err_message_import3 db 'Ошибка при импорте библиотеки libimg.obj',0 + err_message_found_lib4 db 'Не удалось найти библиотеку msgbox.obj',0 + err_message_import4 db 'Ошибка при импорте библиотеки msgbox.obj',0 + + head_f_i: + head_f_l db 'Системная ошибка',0 ;заголовок окна, при возникновении ошибки +else + + err_message_found_lib0 db 'Sorry I cannot found library box_lib.obj',0 + err_message_import0 db 'Error on load import library box_lib.obj',0 + err_message_found_lib1 db 'Sorry I cannot found library proc_lib.obj',0 + err_message_import1 db 'Error on load import library proc_lib.obj',0 + err_message_found_lib2 db 'Sorry I cannot found library buf2d.obj',0 + err_message_import2 db 'Error on load import library buf2d.obj',0 + err_message_found_lib3 db 'Sorry I cannot found library libimg.obj',0 + err_message_import3 db 'Error on load import library libimg.obj',0 + err_message_found_lib4 db 'Sorry I cannot found library msgbox.obj',0 + err_message_import4 db 'Error on load import library msgbox.obj',0 + + head_f_i: + head_f_l db 'System error',0 ;заголовок окна, при возникновении ошибки +end if + + system_dir0 db '/sys/lib/' + lib0_name db 'box_lib.obj',0 + + system_dir1 db '/sys/lib/' + lib1_name db 'proc_lib.obj',0 + + system_dir2 db '/sys/lib/' + lib2_name db 'buf2d.obj',0 + + system_dir3 db '/sys/lib/' + lib3_name db 'libimg.obj',0 + + system_dir4 db '/sys/lib/' + lib4_name db 'msgbox.obj',0 + +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_cruve_bezier dd sz_buf2d_cruve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h +dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование прямоугольника, 2-я координата задана по размеру + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 + sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + +align 4 +import_box_lib: + dd alib_init2 + + edit_box_draw dd aEdit_box_draw + edit_box_key dd aEdit_box_key + edit_box_mouse dd aEdit_box_mouse + edit_box_set_text dd aEdit_box_set_text + + scrollbar_ver_draw dd aScrollbar_ver_draw + scrollbar_hor_draw dd aScrollbar_hor_draw + + tl_data_init dd sz_tl_data_init + tl_data_clear dd sz_tl_data_clear + tl_info_clear dd sz_tl_info_clear + tl_key dd sz_tl_key + tl_mouse dd sz_tl_mouse + tl_draw dd sz_tl_draw + tl_info_undo dd sz_tl_info_undo + tl_info_redo dd sz_tl_info_redo + tl_node_add dd sz_tl_node_add + tl_node_set_data dd sz_tl_node_set_data + tl_node_get_data dd sz_tl_node_get_data + tl_node_delete dd sz_tl_node_delete + tl_cur_beg dd sz_tl_cur_beg + tl_cur_next dd sz_tl_cur_next + tl_cur_perv dd sz_tl_cur_perv + tl_node_close_open dd sz_tl_node_close_open + tl_node_lev_inc dd sz_tl_node_lev_inc + tl_node_lev_dec dd sz_tl_node_lev_dec + tl_node_poi_get_info dd sz_tl_node_poi_get_info + tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info + tl_node_poi_get_data dd sz_tl_node_poi_get_data + + ted_but_save_file dd sz_ted_but_save_file + ted_but_sumb_upper dd sz_ted_but_sumb_upper + ted_but_sumb_lover dd sz_ted_but_sumb_lover + ted_can_save dd sz_ted_can_save + ted_clear dd sz_ted_clear + ted_delete dd sz_ted_delete + ted_draw dd sz_ted_draw + ted_init dd sz_ted_init + ted_init_scroll_bars dd sz_ted_init_scroll_bars + ted_init_syntax_file dd sz_ted_init_syntax_file + ted_is_select dd sz_ted_is_select + ted_key dd sz_ted_key + ted_mouse dd sz_ted_mouse + ted_open_file dd sz_ted_open_file + ted_text_add dd sz_ted_text_add + ted_but_select_word dd sz_ted_but_select_word + ted_but_cut dd sz_ted_but_cut + ted_but_copy dd sz_ted_but_copy + ted_but_paste dd sz_ted_but_paste + ted_but_undo dd sz_ted_but_undo + ted_but_redo dd sz_ted_but_redo + ted_but_reverse dd sz_ted_but_reverse + ted_but_find_next dd sz_ted_but_find_next + ted_text_colored dd sz_ted_text_colored + ;version_text_edit dd sz_ted_version + +dd 0,0 + + alib_init2 db 'lib_init',0 + + aEdit_box_draw db 'edit_box',0 + aEdit_box_key db 'edit_box_key',0 + aEdit_box_mouse db 'edit_box_mouse',0 + aEdit_box_set_text db 'edit_box_set_text',0 + + aScrollbar_ver_draw db 'scrollbar_v_draw',0 + aScrollbar_hor_draw db 'scrollbar_h_draw',0 + + sz_tl_data_init db 'tl_data_init',0 + sz_tl_data_clear db 'tl_data_clear',0 + sz_tl_info_clear db 'tl_info_clear',0 + sz_tl_key db 'tl_key',0 + sz_tl_mouse db 'tl_mouse',0 + sz_tl_draw db 'tl_draw',0 + sz_tl_info_undo db 'tl_info_undo',0 + sz_tl_info_redo db 'tl_info_redo',0 + sz_tl_node_add db 'tl_node_add',0 + sz_tl_node_set_data db 'tl_node_set_data',0 + sz_tl_node_get_data db 'tl_node_get_data',0 + sz_tl_node_delete db 'tl_node_delete',0 + sz_tl_cur_beg db 'tl_cur_beg',0 + sz_tl_cur_next db 'tl_cur_next',0 + sz_tl_cur_perv db 'tl_cur_perv',0 + sz_tl_node_close_open db 'tl_node_close_open',0 + sz_tl_node_lev_inc db 'tl_node_lev_inc',0 + sz_tl_node_lev_dec db 'tl_node_lev_dec',0 + sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 + sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 + sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 + + sz_ted_but_save_file db 'ted_but_save_file',0 + sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 + sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 + sz_ted_can_save db 'ted_can_save',0 + sz_ted_clear db 'ted_clear',0 + sz_ted_delete db 'ted_delete',0 + sz_ted_draw db 'ted_draw',0 + sz_ted_init db 'ted_init',0 + sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 + sz_ted_init_syntax_file db 'ted_init_syntax_file',0 + sz_ted_is_select db 'ted_is_select',0 + sz_ted_key db 'ted_key',0 + sz_ted_mouse db 'ted_mouse',0 + sz_ted_open_file db 'ted_open_file',0 + sz_ted_text_add db 'ted_text_add',0 + sz_ted_but_select_word db 'ted_but_select_word',0 + sz_ted_but_cut db 'ted_but_cut',0 + sz_ted_but_copy db 'ted_but_copy',0 + sz_ted_but_paste db 'ted_but_paste',0 + sz_ted_but_undo db 'ted_but_undo',0 + sz_ted_but_redo db 'ted_but_redo',0 + sz_ted_but_reverse db 'ted_but_reverse',0 + sz_ted_but_find_next db 'ted_but_find_next',0 + sz_ted_text_colored db 'ted_text_colored',0 + ;sz_ted_version db 'version_text_edit',0 + +align 4 +import_proc_lib: + OpenDialog_Init dd aOpenDialog_Init + OpenDialog_Start dd aOpenDialog_Start +dd 0,0 + aOpenDialog_Init db 'OpenDialog_init',0 + aOpenDialog_Start db 'OpenDialog_start',0 + +align 4 +import_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + +dd 0,0 + + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',0 + +align 4 +import_msgbox_lib: + mb_create dd amb_create + mb_reinit dd amb_reinit + mb_setfunctions dd amb_setfunctions +dd 0,0 + amb_create db 'mb_create',0 + amb_reinit db 'mb_reinit',0 + amb_setfunctions db 'mb_setfunctions',0 + +;library structures +l_libs_start: + lib0 l_libs lib0_name, sys_path, library_path, system_dir0, err_message_found_lib0, head_f_l, import_box_lib, err_message_import0, head_f_i + lib1 l_libs lib1_name, sys_path, library_path, system_dir1, err_message_found_lib1, head_f_l, import_proc_lib,err_message_import1, head_f_i + lib2 l_libs lib2_name, sys_path, library_path, system_dir2, err_message_found_lib2, head_f_l, import_buf2d_lib, err_message_import2, head_f_i + lib3 l_libs lib3_name, sys_path, library_path, system_dir3, err_message_found_lib3, head_f_l, import_libimg, err_message_import3, head_f_i + lib4 l_libs lib4_name, sys_path, library_path, system_dir4, err_message_found_lib4, head_f_l, import_msgbox_lib, err_message_import4, head_f_i +load_lib_end: + + +align 16 +procinfo process_information +run_file_70 FileInfoBlock + +i_end: + buf_cmd_lin rb 1024 + fp_icon rb 1024 ;icon file path + fp_obj_opt rb 1024 ;obj options file patch + rb 1024 + thread: ;вверху дочерний стек для окна сообщения + rb 1024 +stacktop: ;вверху стек основной программы + sys_path rb 1024 + library_path rb 1024 +mem: diff --git a/programs/develop/kol_f_edit/ced_wnd_m.inc b/programs/develop/kol_f_edit/ced_wnd_m.inc new file mode 100644 index 0000000000..14da7b6086 --- /dev/null +++ b/programs/develop/kol_f_edit/ced_wnd_m.inc @@ -0,0 +1,434 @@ +align 4 +draw_obj_info: + mov eax,13 ;rect + mov edx,WND_CAPT_COLOR + mov ebx,[wndObjI.left] + shl ebx,16 + add ebx,[wndObjI.width] + mov ecx,[wndObjI.top] + add ecx,[recMain.top] + shl ecx,16 + add ecx,[wndObjI.height] + sub ecx,[recMain.top] + mov edx,0xffffff ;0x80ffffff + int 0x40 ;прямоугольник для окна + + mov ecx,[wndObjI.top] ;draw caption + shl ecx,16 + add ecx,[recMain.top] + mov edx,WND_CAPT_COLOR + int 0x40 + + mov edx,[foc_obj] ;init icon pointers + cmp edx,0 + je .exit_fun +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + pushad + ;draw caption wndObjI + mov eax,4 ;подпись - название объекта + + mov bl,[edx] + call find_obj_in_opt + mov edx,edi + + mov ebx,[wndObjI.left] + add ebx,[recMain.left] + add ebx,4 + shl ebx,16 + add ebx,[wndObjI.top] + add ebx,4 + mov ecx,0xc0d000ff + mov edi,WND_CAPT_COLOR + add edx,obj_opt.info-obj_opt + int 0x40 + + mov eax,8 ;кнопка для сохранения изменений + mov ebx,125*65536+20 + mov ecx,161*65536+10 + mov edx,10 + mov esi,0xd040 + int 0x40 + popad +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + stdcall [edit_box_draw], dword edit2 + stdcall [edit_box_draw], dword edit3 + stdcall [edit_box_draw], dword edit4 + stdcall [edit_box_draw], dword edit5 + stdcall [edit_box_draw], dword edit6 + stdcall [edit_box_draw], dword edit7 + stdcall [edit_box_draw], dword edit8 + stdcall [edit_box_draw], dword edit9 + + xor ebx,ebx ;номер поля + .draw_column: + mov eax,ebx + imul eax,[recMain.height] + add eax,[recMain.top] + add eax,[wndObjI.top] + stdcall draw_icon_obj,[edx],ebx,eax + + inc ebx + cmp ebx,MAX_OPT_FIELDS + jl .draw_column + .exit_fun: + ret + +;обновление объектов в tree2, по значениям текстовых полей +;функция обратная к данной on_file_object_select +align 4 +but_element_change: + ;foc_obj - указатель на последний выбранный узел в tree2 + cmp dword[foc_obj],0 + je @f + pushad + stdcall get_obj_win_param, 0,edit2 + stdcall get_obj_win_param, 1,edit3 + stdcall get_obj_win_param, 2,edit4 + stdcall get_obj_win_param, 3,edit5 + stdcall get_obj_win_param, 4,edit6 + stdcall get_obj_win_param, 5,edit7 + stdcall get_obj_win_param, 6,edit8 + stdcall get_obj_win_param, 7,edit9 + popad + @@: + call draw_constructor ;обновляем окно конструктора + call draw_window + ret + +align 4 +proc get_obj_win_param, col:dword, edit:dword +;pushad + stdcall get_obj_text_col, [foc_obj], [col] ;edx - смещение для текста + stdcall get_obj_text_len_col, [foc_obj], [col] ;eax - длинна поля + cld + mov edi,[edit] + mov esi,ed_text + mov edi,edx + mov ecx,eax + rep movsb + ret +;popad +endp + +;input: +; obj - pointer to object +; ind - column index +;output: +; edx + offset +; edx = 0 if not text +align 4 +proc get_obj_text_col, obj:dword, ind:dword + mov edx,dword[obj] + inc edx ;goto text +push ebx + mov ebx,dword[ind] + cmp bx,0 + je .end_fun + + shl ebx,8 ;в bh попадает номер искомой колонки + mov bl,byte[edx-1] ;в bl попадает код объекта + + push ecx edi + call find_obj_in_opt ;ищем структуру с опциями объекта + + add edi,obj_opt.Col-obj_opt + dec bh + and ebx,0xff00 + shr ebx,7 ;сдвигаем на 7, т.к. нужно значение bh умноженное на 2 + add edi,ebx ;+ бывшее bh*2 + xor ecx,ecx + mov cx,word[edi] ;ecx - сдиг для искомого поля + add edx,ecx + + cmp cx,0 + jg @f + mov edx,0 ;not text + @@: + cmp cx,MAX_LEN_OBJ_TXT + jl @f + mov edx,0 ;not text + @@: + + pop edi ecx + .end_fun: +pop ebx + ret +endp + +;input: +; obj - указатель на объект +; ind - номер поля внутри объекта +;output: +; eax - длинна текстового поля внутри объекта +align 4 +proc get_obj_text_len_col, obj:dword, ind:dword + xor eax,eax +push ebx + mov ebx,dword[ind] + shl ebx,8 ;в bh попадает номер искомой колонки + mov eax,dword[obj] + mov bl,byte[eax] ;в bl попадает код объекта + xor eax,eax + + push edi + call find_obj_in_opt ;ищем структуру с опциями объекта + + add edi,obj_opt.Col-obj_opt + and ebx,0xff00 + shr ebx,7 ;сдвигаем на 7, т.к. нужно значение bh умноженное на 2 + add edi,ebx ;+ бывшее bh*2 + + mov ax,word[edi] ;eax - сдиг для следущего поля + cmp ax,0 + jg @f + mov eax,MAX_LEN_OBJ_TXT ;последние поля для удобства кодируются 0, а не MAX_LEN_OBJ_TXT, исправляем ситуацию + @@: + cmp dword[ind],0 + je .end_fun ;для первого поля сдиг = 0, потому в структуре он не хранится, т.к. известен заранее + sub ax,word[edi-2] ;отнимаем сдиг для искомого поля, получаем длинну поля + + cmp word[edi-2],0 + jg @f + mov eax,0 ;поле пустое, не используется + @@: + cmp ax,MAX_LEN_OBJ_TXT + jl @f + mov eax,0 ;not text + @@: + + pop edi + .end_fun: +pop ebx + ret +endp + +align 4 +proc draw_icon_obj, o_type:dword,n_col:dword, coord_y:dword + pushad + xor ebx,ebx + mov bl,byte[o_type] + call find_obj_in_opt + + add edi,obj_opt.img-obj_opt ;get index (+0) + mov ebx,[n_col] + shl ebx,1 + add edi,ebx ;move index (+bh) + xor ecx,ecx + mov cx,[edi] + + cmp cx,0 + jge @f + jmp .end_fun ;error icon index + @@: + + mov ebx,bmp_icon + imul ecx,0x300 + add ebx,ecx + + mov eax,7 + mov ecx,0x100010 ;ecx - size:16*16 + mov edx,[wndObjI.left] + add edx,5 + shl edx,16 + add edx,[coord_y] + int 0x40 + .end_fun: + popad + ret +endp + +align 4 +proc draw_icon, ind:dword,coord_x:dword,coord_y:dword + pushad + mov ecx,[ind] + cmp ecx,0 + jl .end_fun + mov ebx,bmp_icon + imul ecx,0x300 + add ebx,ecx + + mov eax,7 + mov ecx,0x100010 ;ecx - size:16*16 + mov edx,[coord_x] + shl edx,16 + add edx,[coord_y] + int 0x40 + .end_fun: + popad + ret +endp + +;input +; bl = cod object +;output: +; edi = pointer to option struct +align 4 +find_obj_in_opt: + push ecx + xor ecx,ecx ;find 'bl' in options + mov edi,obj_opt + @@: + cmp bl,[edi] ;find + je @f + inc ecx + cmp ecx,MAX_OBJ_TYPES + je @f ;not find + add edi,sizeof.ObjOpt + jmp @b + @@: + pop ecx + ret + + +obj_find_last dd 0 ;указатель на последний удачно найденный объект, + ;нужен для ускорения последущего поиска + +;выход: +;eax - указатель на структуру найденного объекта +align 4 +proc find_obj_in_file, o_type:dword +push ebx esi + mov ebx,[o_type] + stdcall dword[tl_node_poi_get_info], 0,tree2 + pop esi + + @@: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop eax ;получаем данные узла + cmp eax,0 + je .find_no + + cmp byte[eax],bl ;смотрим описан ли искомый объект в узле + je .find_yes + + stdcall dword[tl_node_poi_get_next_info], esi,tree2 + pop esi ;переходим к следущему узлу + + jmp @b + + .find_yes: + mov dword[obj_find_last],esi + jmp @f + .find_no: + mov dword[obj_find_last],0 + xor eax,eax + @@: +pop esi ebx + ret +endp + +;выход: +;eax - указатель на структуру найденного объекта +align 4 +proc find_obj_in_file_next, o_type:dword +push ebx esi + cmp dword[obj_find_last],0 + je .find_no + + mov ebx,[o_type] + + stdcall dword[tl_node_poi_get_next_info], dword[obj_find_last],tree2 + pop esi ;переходим к следущему узлу + + @@: + cmp esi,0 + je .find_no + + stdcall dword[tl_node_poi_get_data], esi,tree2 + pop eax ;получаем данные узла + cmp eax,0 + je .find_no + + cmp byte[eax],bl ;смотрим описан ли искомый объект в узле + je .find_yes + + stdcall dword[tl_node_poi_get_next_info], esi, tree2 + pop esi ;переходим к следущему узлу + + jmp @b + + .find_yes: + mov dword[obj_find_last],esi + jmp @f + .find_no: + mov dword[obj_find_last],0 + xor eax,eax + @@: +pop esi ebx + ret +endp + +align 4 +but_show_constructor: + mov byte[show_mode],0 + stdcall [buf2d_draw], buf_fon + ret + +align 4 +but_show_code: + mov byte[show_mode],1 + stdcall [ted_draw], tedit0 + ret + +;input: +; buf - указатель на строку, число должно быть в 10 или 16 ричном виде +;output: +; eax - число +align 4 +proc conv_str_to_int, buf:dword + xor eax,eax + push ebx esi + xor ebx,ebx + mov esi,[buf] + cmp word[esi],'0x' + je .load_digit_16 + + .load_digit_10: ;считывание 10-тичных цифр + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'9' + jg @f + sub bl,'0' + imul eax,10 + add eax,ebx + inc esi + jmp .load_digit_10 + jmp @f + + .load_digit_16: ;считывание 16-ричных цифр + add esi,2 + .cycle_16: + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'f' + jg @f + cmp bl,'9' + jle .us1 + cmp bl,'A' + jl @f ;отсеиваем символы >'9' и <'A' + .us1: ;составное условие + cmp bl,'F' + jle .us2 + cmp bl,'a' + jl @f ;отсеиваем символы >'F' и <'a' + sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки + .us2: ;составное условие + sub bl,'0' + cmp bl,9 + jle .cor1 + sub bl,7 ;convert 'A' to '10' + .cor1: + shl eax,4 + add eax,ebx + inc esi + jmp .cycle_16 + @@: + + pop esi ebx + ret +endp diff --git a/programs/develop/kol_f_edit/dll.inc b/programs/develop/kol_f_edit/dll.inc new file mode 100644 index 0000000000..5f13fbbc16 --- /dev/null +++ b/programs/develop/kol_f_edit/dll.inc @@ -0,0 +1,99 @@ + +proc dll.Load, import_table:dword + mov esi,[import_table] + .next_lib: mov edx,[esi] + or edx,edx + jz .exit + push esi + mov esi,[esi+4] + mov edi,s_libdir.fname + @@: lodsb + stosb + or al,al + jnz @b + mcall 68,19,s_libdir + or eax,eax + jz .fail + stdcall dll.Link,eax,edx + push eax + mov eax, [eax] + cmp dword [eax], 'lib_' + pop eax + jnz @f + stdcall dll.Init,[eax+4] + @@: + pop esi + add esi,8 + jmp .next_lib + .exit: xor eax,eax + ret + .fail: add esp,4 + xor eax,eax + inc eax + ret +endp + +proc dll.Link, exp:dword,imp:dword + push eax + mov esi,[imp] + test esi,esi + jz .done + .next: lodsd + test eax,eax + jz .done + stdcall dll.GetProcAddress,[exp],eax + or eax,eax + jz @f + mov [esi-4],eax + jmp .next + @@: mov dword[esp],0 + .done: pop eax + ret +endp + +proc dll.Init, dllentry:dword + pushad + mov eax,mem.Alloc + mov ebx,mem.Free + mov ecx,mem.ReAlloc + mov edx,dll.Load + stdcall [dllentry] + popad + ret +endp + +proc dll.GetProcAddress, exp:dword,sz_name:dword + mov edx,[exp] + xor eax,eax + .next: or edx,edx + jz .end + cmp dword[edx],0 + jz .end + stdcall strcmp,[edx],[sz_name] + test eax,eax + jz .ok + add edx,8 + jmp .next + .ok: mov eax,[edx+4] + .end: ret +endp + +proc strcmp, str1:dword,str2:dword + push esi edi + mov esi,[str1] + mov edi,[str2] + xor eax,eax + @@: lodsb + scasb + jne .fail + or al,al + jnz @b + jmp .ok + .fail: or eax,-1 + .ok: pop edi esi + ret +endp + +s_libdir: + db '/sys/lib/' + .fname rb 32 diff --git a/programs/develop/kol_f_edit/icon.bmp b/programs/develop/kol_f_edit/icon.bmp new file mode 100644 index 0000000000..b5b6659754 Binary files /dev/null and b/programs/develop/kol_f_edit/icon.bmp differ diff --git a/programs/develop/kol_f_edit/left.bmp b/programs/develop/kol_f_edit/left.bmp new file mode 100644 index 0000000000..0c855b6766 Binary files /dev/null and b/programs/develop/kol_f_edit/left.bmp differ diff --git a/programs/develop/kol_f_edit/mem.inc b/programs/develop/kol_f_edit/mem.inc new file mode 100644 index 0000000000..ec78fbf7f6 --- /dev/null +++ b/programs/develop/kol_f_edit/mem.inc @@ -0,0 +1,48 @@ +;----------------------------------------------------------------------------- +proc mem.Alloc,size ;///////////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx + mov ecx,[size] + ;*** add ecx,4 + mcall 68,12 + ;*** add ecx,-4 + ;*** mov [eax],ecx + ;*** add eax,4 + pop ecx ebx + ret +endp + +;----------------------------------------------------------------------------- +proc mem.ReAlloc,mptr,size ;////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx edx + mov ecx,[size] + or ecx,ecx + jz @f + ;*** add ecx,4 + @@: mov edx,[mptr] + or edx,edx + jz @f + ;*** add edx,-4 + @@: mcall 68,20 + or eax,eax + jz @f + ;*** add ecx,-4 + ;*** mov [eax],ecx + ;*** add eax,4 + @@: pop edx ecx ebx + ret +endp + +;----------------------------------------------------------------------------- +proc mem.Free,mptr ;////////////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx + mov ecx,[mptr] + or ecx,ecx + jz @f + ;*** add ecx,-4 + @@: mcall 68,13 + pop ecx ebx + ret +endp diff --git a/programs/develop/kol_f_edit/min_prog.ced b/programs/develop/kol_f_edit/min_prog.ced new file mode 100644 index 0000000000..4a9eb30059 Binary files /dev/null and b/programs/develop/kol_f_edit/min_prog.ced differ diff --git a/programs/develop/kol_f_edit/ob_o.asm b/programs/develop/kol_f_edit/ob_o.asm new file mode 100644 index 0000000000..99563dd2a5 --- /dev/null +++ b/programs/develop/kol_f_edit/ob_o.asm @@ -0,0 +1,84 @@ +;lang equ ru + +MAX_LEN_OBJ_TXT equ 200 + +C_TD equ 't' ;typedef +C_AC equ 'a' ;автоматические коды (auto code) +C_ST equ 's' ;struct +C_IN equ '#' ;include +C_TT equ 'd' ;блок кода (данных) +C_VR equ '-' ;переменная +C_CO equ ';' ;комментарий +C_WI equ 'w' ;окно +C_CB equ 'c' ;CheckBox +C_OP equ 'o' ;OptionBox +C_ED equ 'e' ;EditBox +C_BU equ 'b' ;Button +C_DT equ 'x' ;рисовать текст +C_RE equ 'r' ;рисовать прямоугольник +C_KE equ 'k' ;клавиатура + +macro ObjOpt c,bl_type,graph,info,caption,Col,img +{ +db c +db bl_type +db graph +@@: db info +rb @b+30-$ +@@: db caption +rb @b+MAX_LEN_OBJ_TXT-$ +dw Col +dw img +} + +ObjOpt C_AC, 1,0,'Авто код','',\ + <0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + <2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_ST, 1,0,'Структура','имя структуры*параметры для макроса',\ + <40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + < 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_BU, 1,1,'Кнопка','идентификатор*отступ слева*отступ сверху*ширина*высота*цвет*имя метки при нажатии',\ + <20, 40, 60, 80,100,120, 0, 0, 0, 0, 0>,\ + <29, 15, 16, 26, 27, 25, -1, -1, -1, -1,-1> +ObjOpt C_ED, 1,1,'Текстовое поле','***отступ сверху*цвет фона*цвет выделения при удерживании shift или мышкой*цвет рамки*при неактивном боксе цвет рамки*цвет текста*максимальная длина текста*начальный текст',\ + <30, 40, 50, 60, 80,100,120,140,160,170, 0>,\ + <10, 26, 15, 16, 25, 25, 25, 25, 25, -1, 4> +ObjOpt C_OP, 1,1,'Радио кнопка','имя*отступ слева*отступ сверху*цвет фона внутри*цвет рамки и внутр. галочки*цвет текста*подпись*отступ до надписи*размер квадрата',\ + <40, 50, 60, 80,100,120,180,190, 0, 0, 0>,\ + < 9, 15, 16, 25, 25, 25, 4, 26, 27, -1, -1> +ObjOpt C_CB, 1,1,'Флажок','***подпись*цвет фона внутри*цвет рамки и внутр. галочки*цвет текста*отступ до надписи*размер квадрата',\ + <40, 50, 60,120,140,160,180,190, 0, 0, 0>,\ + < 8, 15, 16, 4, 25, 25, 25, 26, 27, -1, -1> +ObjOpt C_TT, 1,0,'asm код','',\ + < 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + <11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_VR, 0,0,'Переменная','имя переменной*значение по умолчанию*комментарий',\ + <40, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + < 0, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_WI, 1,1,'Окно','**отступ слева*отступ сверху*ширина*высота*цвет клиентской области*цвет заголовка (если есть)',\ + <98,100,110,120,130,150,170, 0, 0, 0, 0>,\ + <12, -1, 15, 16, 26, 27, 25, 25, -1, -1, -1> +ObjOpt C_CO, 1,0,'Комментарий','строка комментария',\ + < 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + < 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_IN, 1,0,'Включение файла','имя файла*комментарий',\ + <100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + < 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_TD, 0,0,'Тип данного','',\ + < 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + < 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt C_DT, 1,1,'Рисование текста','***цвет текста*цвет фона (если есть)',\ + <40, 50, 60, 80, 0, 0, 0, 0, 0, 0, 0>,\ + < 4, 15, 16, 25, 25, -1, -1, -1, -1, -1, -1> +ObjOpt C_RE, 1,1,'Прямоугольник','цвет*отступ слева*отступ сверху*ширина*высота',\ + <20, 40, 60, 80, 0, 0, 0, 0, 0, 0, 0>,\ + <25, 15, 16, 26, 27, -1, -1, -1, -1, -1, -1> +ObjOpt C_KE, 1,0,'Событие на клавиатуру','',\ + < 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + <28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> +ObjOpt 0x0d, 1,0, '-','',\ + <20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>,\ + <-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> + + + diff --git a/programs/develop/kol_f_edit/oper.bmp b/programs/develop/kol_f_edit/oper.bmp new file mode 100644 index 0000000000..57c09f5408 Binary files /dev/null and b/programs/develop/kol_f_edit/oper.bmp differ diff --git a/programs/develop/kol_f_edit/readme.htm b/programs/develop/kol_f_edit/readme.htm new file mode 100644 index 0000000000..98f6d00b46 --- /dev/null +++ b/programs/develop/kol_f_edit/readme.htm @@ -0,0 +1,69 @@ + + +╬уыртыхэшх + + + + + +

Kol_f_edit тхЁёш  юЄ 11.11.2010

+

╬ яЁюуЁрььх

+

╧ЁюуЁрььр фы  ртЄюьрЄшчрЎшш ёючфрэш  шэЄхЁЇхщёр. + ╠эюушх ЇєэъЎшш яЁюуЁрьь√ яюър х∙х эх ёфхырэ√, яюЄюьє тючьюцэюёЄш хх яЁръЄшўхёъюую шёяюы№чютрэш  ьшэшьры№э√х. + ╦шЎхэчш  ётюсюфэр .

+

+

┬эх°эшщ тшф яЁюуЁрьь√.

+ +

└ыуюЁшЄь ЁрсюЄ√ ё яЁюуЁрььющ

+

1) ╬ЄъЁ√трхь °рсыюэ яЁюуЁрьь√ шч Їрщыр min_prog.ced (яюър юэ Єюы№ъю юфшэ, фры№°х яырэшЁєхЄ№ё  фюсртыхэшх фЁєушї °рсыюэют)

+

2) ╨хфръЄшЁєхь юс·хъЄ√ т Їрщых min_prog.ced (сюыхх яюфЁюсэ√х шэёЄЁєъЎшш яю ЁхфръЄшЁютрэш■ фюсрты■ ъюуфр яЁюуЁрььр сєфхЄ уюЄютр)

+

3) ╤ючфрхь *.asm ъюф т ЄхъёЄютюь юъэх ъэюяъющ эр ярэхыш. ╤юїЁрэ хь *.asm ъюф эр фшёъ (ЁрсюЄюёяюёюсэюёЄ№ яюыєўшт°хуюё  Їрщыр эх урЁрэЄшЁєхЄё , Є. ъ. ьэюушх ¤ыхьхэЄ√ х∙х фюъюэЎр эх чряЁюуЁрьшЁютрэ√)

+

4) ╨хфръЄшЁєхь яюыєўшт°шщё  *.asm Їрщы ы■с√ь ЄхъёЄют√ь ЁхфръЄюЁюь

+ +

└тЄюЁ

+

╚уюЁ№ └. (IgorA) - ЁрчЁрсюЄър яЁюуЁрьь√.

+ + + \ No newline at end of file diff --git a/programs/develop/kol_f_edit/strlen.inc b/programs/develop/kol_f_edit/strlen.inc new file mode 100644 index 0000000000..3954520d9b --- /dev/null +++ b/programs/develop/kol_f_edit/strlen.inc @@ -0,0 +1,45 @@ +; strlen function +; +; Copyright (c) 2003 Thomas Mathys +; killer@vantage.ch +; +; This program is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +; +;%ifndef _STRLEN_INC +;%define _STRLEN_INC + + +;******************************************************************** +; returns the length of an asciiz string +; input : esi = pointer to string +; output : eax = string length +; destroys : nothing +;******************************************************************** +strlen: + push ecx + push edi + pushfd + cld ; ! + mov ecx,-1 + mov edi,esi ; find terminating zero + xor al,al + repne scasb + mov eax,edi ; calculate string length + sub eax,esi + dec eax + popfd + pop edi + pop ecx + ret diff --git a/programs/develop/kol_f_edit/tl_sys_16.png b/programs/develop/kol_f_edit/tl_sys_16.png new file mode 100644 index 0000000000..65fac3ba12 Binary files /dev/null and b/programs/develop/kol_f_edit/tl_sys_16.png differ