From be5947897ec989c6e6680b1f92e1193cbe54de29 Mon Sep 17 00:00:00 2001 From: IgorA Date: Thu, 11 Nov 2010 21:47:18 +0000 Subject: [PATCH] Add new programm 'kol_f_edit' Details view in 'readme.htm' git-svn-id: svn://kolibrios.org@1698 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/kol_f_edit/about.png | Bin 0 -> 23967 bytes programs/develop/kol_f_edit/base.bmp | Bin 0 -> 584 bytes programs/develop/kol_f_edit/build.bat | 17 + programs/develop/kol_f_edit/ced_code_g.inc | 1032 +++++++++++++++ programs/develop/kol_f_edit/ced_constr.inc | 321 +++++ programs/develop/kol_f_edit/ced_view.asm | 1314 ++++++++++++++++++++ programs/develop/kol_f_edit/ced_wnd_m.inc | 434 +++++++ programs/develop/kol_f_edit/dll.inc | 99 ++ programs/develop/kol_f_edit/icon.bmp | Bin 0 -> 23094 bytes programs/develop/kol_f_edit/left.bmp | Bin 0 -> 408 bytes programs/develop/kol_f_edit/mem.inc | 48 + programs/develop/kol_f_edit/min_prog.ced | Bin 0 -> 27240 bytes programs/develop/kol_f_edit/ob_o.asm | 84 ++ programs/develop/kol_f_edit/oper.bmp | Bin 0 -> 1640 bytes programs/develop/kol_f_edit/readme.htm | 69 + programs/develop/kol_f_edit/strlen.inc | 45 + programs/develop/kol_f_edit/tl_sys_16.png | Bin 0 -> 1425 bytes 17 files changed, 3463 insertions(+) create mode 100644 programs/develop/kol_f_edit/about.png create mode 100644 programs/develop/kol_f_edit/base.bmp create mode 100644 programs/develop/kol_f_edit/build.bat create mode 100644 programs/develop/kol_f_edit/ced_code_g.inc create mode 100644 programs/develop/kol_f_edit/ced_constr.inc create mode 100644 programs/develop/kol_f_edit/ced_view.asm create mode 100644 programs/develop/kol_f_edit/ced_wnd_m.inc create mode 100644 programs/develop/kol_f_edit/dll.inc create mode 100644 programs/develop/kol_f_edit/icon.bmp create mode 100644 programs/develop/kol_f_edit/left.bmp create mode 100644 programs/develop/kol_f_edit/mem.inc create mode 100644 programs/develop/kol_f_edit/min_prog.ced create mode 100644 programs/develop/kol_f_edit/ob_o.asm create mode 100644 programs/develop/kol_f_edit/oper.bmp create mode 100644 programs/develop/kol_f_edit/readme.htm create mode 100644 programs/develop/kol_f_edit/strlen.inc create mode 100644 programs/develop/kol_f_edit/tl_sys_16.png diff --git a/programs/develop/kol_f_edit/about.png b/programs/develop/kol_f_edit/about.png new file mode 100644 index 0000000000000000000000000000000000000000..e93eedfb14f1272a522590c2d8b62e78b51bd5b5 GIT binary patch literal 23967 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 Hz8mp>u{DD9 literal 0 HcmV?d00001 diff --git a/programs/develop/kol_f_edit/base.bmp b/programs/develop/kol_f_edit/base.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a6619c972a3c8722b20d12048853f5bfb8ef1ec3 GIT binary patch literal 584 zcmZY6F-yZx6o%oei-VA%1#uC~py^`Awg&1@P@*EqWL=7l;$G`gp)URd_x>|mZH5Z5 z;?zZoP2YP`K{%J^hL1Pd(zpoLjhqV45_f~U#a%PoJo8i7G{)Y)^A?_Hyvzpuf1a`d z`l_$KvHj&AAob4H#+AN%h3(0#A%f`P<$>655x pg+lg6RHJ{!r%2m@6$k8Td`AE3URw`hwcGTxd#lm)Pp8n0SpwSF@ofMA literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b5b6659754522ec892b5e93196dd4e8c253629e3 GIT binary patch literal 23094 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 literal 0 HcmV?d00001 diff --git a/programs/develop/kol_f_edit/left.bmp b/programs/develop/kol_f_edit/left.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0c855b6766516d79bd904210ccf2bcddd31fca41 GIT binary patch literal 408 zcmZ?rox#We24+A~1Bh9HSPY0686TCH;pXFuyYVKMaBR{|fx!2*m%J>Iz37{_j{@I0Es1hMB_=i2ub~7mh&ucTTEs z1meH6l7%A>|Dm2R9D(?EHTd8N#J{7?2SIn$`M~O}6d%G6i2p3W0**lZ*NI+m1meFb Uj)$QH5dURSG8}>U$OstB0H5fr=>Px# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4a9eb300598b2d33d6a2497130373583e4d75de1 GIT binary patch literal 27240 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 nflrO%;L+h;7-$lhU,\ + <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 0000000000000000000000000000000000000000..57c09f54086181c1a5d3347c65d49b06d3455642 GIT binary patch literal 1640 zcmbu9T}YEr7{?ccnbIs*PRq=)>E_1@Kepi~ZhmXNQ)+6qTrN>WaB7H#c2PvvLfwf_ zU36oCw{}-V7e!ta1?sfvOr5$i$8>J<>3R3egGo)J!|y$u_nh& znVq=CrLrJ->}m + +╬уыртыхэшх + + + + + +

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 0000000000000000000000000000000000000000..65fac3ba12531b6c908b82d8a509744468817157 GIT binary patch literal 1425 zcmV;C1#bF@P)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11nNmd zK~!i%?V4RkR6!Jg#~#$S4Sh2z%C`g|kzRb;0$+?05yBp%G7T|^1T6@}-FoPUtlfSL zlJE)z;m=bP5*b#~9}-(e^=M(?Lq!ltglnfcv(9zy+_`sVQ!DJ=<*=9CIo~~J?#!7p z=iV%!2bs@-fcYFmr#wD64pA!#iGc)6r>0%awE$Em2MH`cyc{apD_jsWfJK0$2!x^` z7sLj9`~D3&dOMi8qC^fxfFJ-r3WyEZcYYsaAIVNPmSu7lAV9Vs+s^vK2IN)e0r?;_ zOkY#|p_Y)%X;mAr@xVqP4-Elhv_H0moPZmTZa_{&4kNo{PykcqaCI0)#zvd~ukpZc zBkx2>+2Mi~pinjfSc4XG34P{fix<-lB;8Q|2LUlQK+=*v_di@M0szc*T+oTZKnf<) zg2#g|G(Q-oYr_+oAIzBK2eJjIY|;GS>LCJsba|H{+K`5TVY)KS&;_+G>V{|m7R?V3 zfb&BI@dYFYH!$TdG(X@Ij6(*FtxzwnVjloRY();>mhh18Yk?Qw9bIToZp+tO5U18xB-cT}%}cV78{>NfIDl$DjsyB9#EYy?Qs`~acoGdJ5eKUna&5UkEiB16G= zAj^}1a{xbo>L=5)n|UlA$a1M}8Qkt{(gOh2E91e}j|5It8U++JU~GuMrMg1B1)Y1c z*+i1%?2deR|K_P45M-)UoIIRV!Tvk>F zkw^p@8X8;>BS2ME6|}dvLwR|*3t|JNrlz2)tBaW{N=;1-ARrctDIqqXt*wojiH&7x zZEa-$5z^S$=$uTYrKQl)(qcE{3aW2(r?60(&XtvwP+wnf1ZZk%g5u(0rv*bpLr_#y z#K^ML*4El!R4yqgfzi=Xbv%%7GbY>|ax?Ta=P2_6o+n({ABJ0ry=uVe zs+I70VlF!u_X+&`>n8#yw&vb~U_xabFJz@`JyX z9|T*TMJNZVV#2H8KC}G-Zn{mErO*@u`(^ePRzKTDE9%cCtjn^8++;VMr}P&1(>TRhFlQW zNR;yfcRkSwaRF5MfxDg3Ji!KwMaOe&DVrhUZgH zoKse&`~LMrr?L@XuAUeQ>WLnaMq69gMJO#G<9Oipe8D&#cnzd`X<0BF zrTb?pcw~T`PRw3jPd0^cnqTR~0Pa{UP^>?VRW{`koX3c+UF+ zzeSfE0DeW?_u>HJ1qIABE{R-Pp_p|8&&B_+EkAt6!Joa2@<@|!W5y#<>=V)F|0y1r z#>S--6D?~JqEY%frGa2u*IXdv9(@CD+)QX&H6TVOpouIBpkU2oI(w-b27+z1@!)?P fNTxn7ctH6DrSWz3H&)?m00000NkvXXu0mjf76N={ literal 0 HcmV?d00001