Rev 3244 | Rev 4308 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1464 | IgorA | 1 | struct FileInfoBlock |
2 | Function dd ? |
||
3 | Position dd ? |
||
4 | Flags dd ? |
||
5 | Count dd ? |
||
6 | Buffer dd ? |
||
7 | db ? |
||
8 | FileName dd ? |
||
1457 | IgorA | 9 | ends |
10 | |||
11 | struct symbol |
||
2125 | IgorA | 12 | c db ? ; +0 символ |
13 | col db ? ; +1 цвет |
||
14 | perv dd ? ; +2 |
||
15 | next dd ? ; +6 указатели |
||
16 | tc dd ? ;+10 врем. создания |
||
17 | td dd ? ;+14 врем. удаления |
||
1457 | IgorA | 18 | ends |
19 | |||
20 | sc system_colors |
||
21 | |||
22 | bmp_icon dd 0 |
||
1464 | IgorA | 23 | run_file_70 FileInfoBlock |
1457 | IgorA | 24 | |
25 | |||
26 | ;input: |
||
27 | ; al = код ошибки |
||
1456 | IgorA | 28 | align 4 |
1457 | IgorA | 29 | ted_on_init_synt_err: |
2855 | IgorA | 30 | mov byte[msgbox_3.err],'0' |
31 | add byte[msgbox_3.err],al |
||
1457 | IgorA | 32 | stdcall [mb_create],msgbox_3,thread ;message: Can-t open color options file! |
33 | ret |
||
34 | |||
35 | |||
36 | align 4 |
||
37 | ted_but_new_file: |
||
38 | push eax ebx |
||
39 | stdcall [ted_can_save], tedit0 |
||
1338 | IgorA | 40 | cmp al,1 |
41 | jne @f |
||
1456 | IgorA | 42 | stdcall [mb_create],msgbox_2,thread ;message: save changes in file? |
1338 | IgorA | 43 | ;mov eax,5 |
44 | ;mov ebx,50 |
||
45 | ;int 0x40 |
||
1456 | IgorA | 46 | stdcall [mb_setfunctions],msgbox_2_funct |
1338 | IgorA | 47 | jmp .ret_f |
48 | @@: |
||
49 | call On_NewFile |
||
50 | .ret_f: |
||
51 | pop ebx eax |
||
52 | ret |
||
53 | |||
1456 | IgorA | 54 | align 4 |
1338 | IgorA | 55 | On_NewFile: |
1457 | IgorA | 56 | stdcall [ted_clear], tedit0,1 |
1338 | IgorA | 57 | call draw_but_toolbar |
1457 | IgorA | 58 | stdcall [ted_draw], tedit0 |
1338 | IgorA | 59 | ret |
60 | |||
1456 | IgorA | 61 | align 4 |
1338 | IgorA | 62 | On_SaveAndNewFile: |
1456 | IgorA | 63 | push edi |
64 | mov edi, tedit0 |
||
65 | |||
1457 | IgorA | 66 | stdcall [ted_but_save_file],edi,run_file_70,[edit1.text] |
1456 | IgorA | 67 | cmp ted_err_save,0 |
1338 | IgorA | 68 | jne @f |
69 | call On_NewFile |
||
70 | @@: |
||
1456 | IgorA | 71 | pop edi |
1338 | IgorA | 72 | ret |
73 | |||
1457 | IgorA | 74 | ;description: |
2102 | IgorA | 75 | ; функция открытия файла без окна сообщения |
1456 | IgorA | 76 | align 4 |
1457 | IgorA | 77 | but_no_msg_OpenFile: |
78 | push eax ebx |
||
79 | stdcall [ted_open_file], tedit0,run_file_70,[edit1.text] |
||
80 | call ted_messages_after_open_file |
||
81 | pop ebx eax |
||
82 | ret |
||
1456 | IgorA | 83 | |
1457 | IgorA | 84 | ;description: |
85 | ; функция открытия файла с возможным окном сообщения (о возможности отменить открытие) |
||
1456 | IgorA | 86 | align 4 |
1457 | IgorA | 87 | ted_but_open_file: |
1467 | IgorA | 88 | pushad |
89 | |||
1457 | IgorA | 90 | stdcall [ted_can_save], tedit0 |
91 | cmp al,1 |
||
92 | jne @f |
||
93 | stdcall [mb_create],msgbox_5,thread ;message: save changes in file? |
||
94 | stdcall [mb_setfunctions],msgbox_5_funct |
||
95 | jmp .ret_f |
||
3366 | IgorA | 96 | .no_msg: ;метка для вызова функции через кнопку в сообщении msgbox_5 |
97 | pushad |
||
1457 | IgorA | 98 | @@: |
1467 | IgorA | 99 | |
1468 | IgorA | 100 | copy_path open_dialog_name,communication_area_default_path,file_name,0 |
1467 | IgorA | 101 | mov [OpenDialog_data.type],0 |
1592 | IgorA | 102 | stdcall [OpenDialog_Start],OpenDialog_data |
1467 | IgorA | 103 | cmp [OpenDialog_data.status],2 |
104 | jne @f |
||
1468 | IgorA | 105 | stdcall mem_spac, msgbox_9.fdp,100 |
106 | mov esi,file_name |
||
107 | call strlen |
||
108 | cmp eax,100 |
||
109 | jle .no_crop |
||
110 | mov eax,100 |
||
111 | .no_crop: |
||
112 | stdcall mem_copy, esi,msgbox_9.fdp,eax |
||
1467 | IgorA | 113 | stdcall [mb_create],msgbox_9,thread ;message: error run 'open file dialog' |
114 | jmp .ret_f |
||
115 | @@: |
||
2817 | IgorA | 116 | cmp [OpenDialog_data.status],1 |
2632 | IgorA | 117 | jne .ret_f |
2817 | IgorA | 118 | mov esi,[OpenDialog_data.openfile_path] |
119 | call strlen |
||
120 | mov [edit1.size],eax |
||
121 | mov [edit1.pos],eax |
||
122 | stdcall [edit_box_draw], edit1 |
||
2855 | IgorA | 123 | |
124 | ;ищем есть ли файл подсветки для открываемого текстового файла |
||
125 | mov edx,[edit1.text] |
||
126 | add edx,eax |
||
127 | .f_beg: |
||
128 | cmp byte[edx],'.' |
||
129 | je .found |
||
130 | dec edx |
||
131 | cmp edx,[edit1.text] |
||
132 | jg .f_beg |
||
133 | .found: |
||
134 | inc edx ;edx - указатель на расширение открытого файла |
||
135 | |||
136 | mov ebx,synt_auto_open |
||
137 | .cycle_0: |
||
138 | add ebx,32 |
||
139 | stdcall strcmp,ebx,edx ;сравниваем расширение открытого файла со значениями открытыми с ini файла |
||
140 | test eax,eax |
||
141 | jz .ok |
||
142 | add ebx,32 |
||
143 | cmp byte[ebx],0 |
||
144 | jne .cycle_0 |
||
145 | jmp .end_0 |
||
146 | .ok: ;открытие файла подсветки в зависимости от найденного расширения |
||
147 | sub ebx,32 |
||
148 | ;mov ecx,ebx |
||
149 | ;mcall 71,1 |
||
150 | call open_unpac_synt_file |
||
151 | .end_0: |
||
152 | |||
2817 | IgorA | 153 | stdcall [ted_open_file], tedit0,run_file_70,[edit1.text] |
154 | call ted_messages_after_open_file |
||
2855 | IgorA | 155 | |
1457 | IgorA | 156 | .ret_f: |
1467 | IgorA | 157 | popad |
1457 | IgorA | 158 | ret |
1338 | IgorA | 159 | |
2102 | IgorA | 160 | ;description: |
161 | ; копирование памяти |
||
1468 | IgorA | 162 | align 4 |
163 | proc mem_copy, source:dword, destination:dword, len:dword |
||
164 | push ecx esi edi |
||
165 | cld |
||
166 | mov esi, dword[source] |
||
167 | mov edi, dword[destination] |
||
168 | mov ecx, dword[len] |
||
169 | rep movsb |
||
170 | pop edi esi ecx |
||
171 | ret |
||
172 | endp |
||
173 | |||
2102 | IgorA | 174 | ;description: |
175 | ; заполнение памяти пробелами |
||
1468 | IgorA | 176 | align 4 |
177 | proc mem_spac, mem:dword, len:dword |
||
178 | push eax ecx edi |
||
179 | cld |
||
180 | mov al,' ' |
||
181 | mov edi, dword[mem] |
||
182 | mov ecx, dword[len] |
||
183 | repne stosb |
||
184 | pop edi ecx eax |
||
185 | ret |
||
186 | endp |
||
187 | |||
1457 | IgorA | 188 | ;input: |
189 | ; eax = код ошибки |
||
190 | ; ebx = колличество прочитанных байт |
||
1456 | IgorA | 191 | align 4 |
1457 | IgorA | 192 | ted_messages_after_open_file: |
2847 | IgorA | 193 | push ecx edi |
1457 | IgorA | 194 | cmp eax,0 |
195 | je @f |
||
196 | cmp eax,6 |
||
197 | je @f |
||
198 | cmp ax,10 |
||
199 | jl .zifra_0_9 |
||
200 | mov al,'?' |
||
201 | sub ax,48 |
||
202 | .zifra_0_9: |
||
203 | add ax,48 |
||
1456 | IgorA | 204 | |
1457 | IgorA | 205 | mov byte[msgbox_4.err],al |
206 | stdcall [mb_create],msgbox_4,thread ;message: Can-t open text file! |
||
207 | jmp .ret_f |
||
208 | @@: |
||
209 | cmp ebx,-1 |
||
210 | je .ret_f |
||
211 | ;if open file |
||
2847 | IgorA | 212 | mov edi,tedit0 |
1457 | IgorA | 213 | mov ecx,ted_max_chars |
214 | sub ecx,2 ;ecx = максимальное число байт, для которых была выделена память |
||
215 | cmp ebx,ecx |
||
216 | jl .ret_f |
||
217 | stdcall [mb_create],msgbox_1,thread |
||
218 | .ret_f: |
||
2847 | IgorA | 219 | pop edi ecx |
1457 | IgorA | 220 | ret |
1338 | IgorA | 221 | |
1456 | IgorA | 222 | align 4 |
1457 | IgorA | 223 | ted_save_err_msg: |
224 | mov byte[msgbox_6.err],al |
||
225 | stdcall [mb_create],msgbox_6,thread ;message: Can-t save text file! |
||
226 | ret |
||
1456 | IgorA | 227 | |
2102 | IgorA | 228 | ;description: |
229 | ; функция нажатия на кнопку [Применить] в панели синтаксиса |
||
1456 | IgorA | 230 | align 4 |
2707 | IgorA | 231 | proc ted_but_open_syntax uses eax ebx ecx edi, edit:dword |
232 | mov edi,dword[edit] |
||
233 | cmp ted_panel_id,TED_PANEL_SYNTAX |
||
234 | jne @f |
||
235 | stdcall dword[tl_node_get_data], tree1 |
||
236 | pop dword[fn_col_option] |
||
237 | mov ebx,dword[fn_col_option] |
||
2708 | IgorA | 238 | call open_unpac_synt_file |
239 | cmp ebx,-1 |
||
240 | je @f |
||
241 | |||
2707 | IgorA | 242 | call [ted_text_colored] |
243 | stdcall [ted_draw],edi |
||
244 | @@: |
||
245 | ret |
||
1456 | IgorA | 246 | endp |
1338 | IgorA | 247 | |
2708 | IgorA | 248 | ;открытие и распаковка файла подсветки синтаксиса |
2855 | IgorA | 249 | ;input: |
250 | ; ebx - указатель на имя открываемого файла синтаксиса (без пути и папки info) |
||
2708 | IgorA | 251 | ;output: |
252 | ; ebx - число прочитанных байт из файла |
||
2855 | IgorA | 253 | ; ecx - разрушается |
2708 | IgorA | 254 | align 4 |
255 | open_unpac_synt_file: |
||
256 | push eax edi esi |
||
2855 | IgorA | 257 | mov edi,last_open_synt_file |
258 | stdcall strcmp,ebx,edi ;сравниваем имя подключенного файла с подключенным ранее файлом |
||
259 | test eax,eax |
||
260 | jz @f |
||
261 | |||
262 | ;копируем имя подключенного файла (для избежания повторных подключений) |
||
263 | mov esi,ebx |
||
264 | mov ecx,32 |
||
265 | cld |
||
266 | rep movsb |
||
267 | |||
268 | copy_path ebx,fn_syntax_dir,file_name_rez,0 |
||
269 | copy_path file_name_rez,sys_path,file_name,0 |
||
2708 | IgorA | 270 | mov edi, tedit0 |
271 | mov [run_file_70.Function], 0 |
||
272 | mov [run_file_70.Position], 0 |
||
273 | mov [run_file_70.Flags], 0 |
||
274 | mov ecx, ted_syntax_file_size |
||
275 | mov dword[run_file_70.Count], ecx |
||
276 | m2m dword[run_file_70.Buffer], ted_syntax_file |
||
277 | mov byte[run_file_70+20], 0 |
||
278 | mov [run_file_70.FileName], file_name |
||
279 | mcall 70, run_file_70 |
||
280 | cmp ebx,-1 |
||
281 | jne .end_0 |
||
282 | call ted_on_init_synt_err |
||
283 | jmp @f |
||
284 | .end_0: |
||
285 | mov eax,ted_syntax_file |
||
286 | cmp dword[eax],'KPCK' |
||
287 | jne .end_unpack |
||
288 | cmp dword[eax+4],ecx |
||
289 | jg @f ;если для распакованого файла не хватает выделенной памяти |
||
290 | cmp dword[unpac_mem],0 |
||
291 | jne .end_1 |
||
292 | ;выделение памяти для распаковки файла |
||
293 | stdcall mem.Alloc,ecx |
||
294 | mov [unpac_mem],eax |
||
295 | .end_1: |
||
296 | stdcall unpack,ted_syntax_file,[unpac_mem] |
||
297 | mov edi,ted_syntax_file |
||
298 | mov esi,[unpac_mem] |
||
299 | mov ecx,[edi+4] |
||
300 | cld |
||
301 | rep movsb |
||
302 | .end_unpack: |
||
303 | stdcall [ted_init_syntax_file], tedit0 |
||
304 | @@: |
||
305 | pop esi edi eax |
||
306 | ret |
||
307 | |||
2102 | IgorA | 308 | ;description: |
309 | ; вызов/скрытие панели поиска |
||
1456 | IgorA | 310 | align 4 |
2102 | IgorA | 311 | proc ted_but_find |
1456 | IgorA | 312 | push edi |
1457 | IgorA | 313 | mov edi,tedit0 |
1456 | IgorA | 314 | |
1457 | IgorA | 315 | cmp ted_panel_id,TED_PANEL_NULL |
1338 | IgorA | 316 | je @f |
1457 | IgorA | 317 | mov ted_panel_id,TED_PANEL_NULL |
1449 | IgorA | 318 | mov ted_wnd_l,0 |
1338 | IgorA | 319 | jmp .e_if |
320 | @@: |
||
1457 | IgorA | 321 | mov ted_panel_id,TED_PANEL_FIND |
322 | mov ted_wnd_l,TED_PANEL_WIDTH |
||
1338 | IgorA | 323 | .e_if: |
2125 | IgorA | 324 | call EvSize |
1457 | IgorA | 325 | stdcall [ted_draw],edi |
1449 | IgorA | 326 | pop edi |
327 | ret |
||
328 | endp |
||
1338 | IgorA | 329 | |
1456 | IgorA | 330 | align 4 |
1457 | IgorA | 331 | ted_on_find_err: |
332 | stdcall [mb_create],msgbox_7,thread ;message: Can not find text |
||
333 | ret |
||
334 | |||
2102 | IgorA | 335 | ;description: |
336 | ; кнопка [Заменить] на панели |
||
1457 | IgorA | 337 | align 4 |
1338 | IgorA | 338 | but_replace: |
2102 | IgorA | 339 | ; пока не сделано |
340 | ret |
||
1338 | IgorA | 341 | |
2102 | IgorA | 342 | ;description: |
343 | ; функция поиска информации в списке ключевых слов |
||
1456 | IgorA | 344 | align 4 |
1338 | IgorA | 345 | but_find_key_w: |
3244 | IgorA | 346 | cmp byte[wnd_k_words_run],0 |
347 | jne @f |
||
348 | pushad |
||
349 | mcall 51,1,prop_start,thread_coords |
||
350 | popad |
||
351 | @@: |
||
2102 | IgorA | 352 | ret |
1338 | IgorA | 353 | |
2102 | IgorA | 354 | ;description: |
355 | ; выделение/скрытие непечатаемых символов |
||
1456 | IgorA | 356 | align 4 |
357 | proc but_sumb_invis, edit:dword |
||
358 | push edi |
||
359 | mov edi,dword[edit] |
||
1338 | IgorA | 360 | |
1456 | IgorA | 361 | xor ted_mode_invis,1 |
362 | call draw_but_toolbar |
||
1457 | IgorA | 363 | stdcall [ted_draw],edi |
1456 | IgorA | 364 | pop edi |
365 | ret |
||
366 | endp |
||
1338 | IgorA | 367 | |
2102 | IgorA | 368 | ;description: |
369 | ; выделение/скрытие ключевых слов |
||
1456 | IgorA | 370 | align 4 |
371 | proc but_k_words_show, edit:dword |
||
372 | push edi |
||
373 | mov edi,dword[edit] |
||
1338 | IgorA | 374 | |
1456 | IgorA | 375 | xor ted_mode_color,1 |
376 | cmp ted_mode_color,0 |
||
377 | je @f |
||
1457 | IgorA | 378 | call [ted_text_colored] |
1456 | IgorA | 379 | @@: |
1338 | IgorA | 380 | call draw_but_toolbar |
1457 | IgorA | 381 | stdcall [ted_draw],edi |
1456 | IgorA | 382 | pop edi |
1338 | IgorA | 383 | ret |
1456 | IgorA | 384 | endp |
1338 | IgorA | 385 | |
2102 | IgorA | 386 | ;description: |
387 | ; вызов/скрытие панели с файлами синтаксиса |
||
1456 | IgorA | 388 | align 4 |
1449 | IgorA | 389 | proc but_synt_show, edit:dword |
390 | push edi |
||
391 | mov edi,[edit] |
||
392 | |||
1457 | IgorA | 393 | cmp ted_panel_id,TED_PANEL_NULL |
1338 | IgorA | 394 | je @f |
1457 | IgorA | 395 | mov ted_panel_id,TED_PANEL_NULL |
1449 | IgorA | 396 | mov ted_wnd_l,0 |
1338 | IgorA | 397 | jmp .e_if |
398 | @@: |
||
1457 | IgorA | 399 | mov ted_panel_id,TED_PANEL_SYNTAX |
400 | mov ted_wnd_l,TED_PANEL_WIDTH |
||
1338 | IgorA | 401 | .e_if: |
2125 | IgorA | 402 | call EvSize |
1457 | IgorA | 403 | stdcall [ted_draw],edi |
1449 | IgorA | 404 | pop edi |
405 | ret |
||
406 | endp |