Rev 4308 | Rev 5643 | 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: |
||
4991 | IgorA | 38 | push eax ebx |
39 | stdcall [ted_can_save], tedit0 |
||
40 | cmp al,1 |
||
41 | jne @f |
||
42 | stdcall [mb_create],msgbox_2,thread ;message: save changes in file? |
||
43 | stdcall [mb_setfunctions],msgbox_2N_funct |
||
44 | jmp .ret_f |
||
45 | @@: |
||
46 | call On_NewFile |
||
47 | .ret_f: |
||
48 | pop ebx eax |
||
49 | ret |
||
1338 | IgorA | 50 | |
1456 | IgorA | 51 | align 4 |
1338 | IgorA | 52 | On_NewFile: |
4991 | IgorA | 53 | stdcall [ted_clear], tedit0,1 |
54 | call draw_but_toolbar |
||
55 | stdcall [ted_draw], tedit0 |
||
56 | ret |
||
1338 | IgorA | 57 | |
1456 | IgorA | 58 | align 4 |
1338 | IgorA | 59 | On_SaveAndNewFile: |
4991 | IgorA | 60 | push edi |
61 | mov edi, tedit0 |
||
1456 | IgorA | 62 | |
4991 | IgorA | 63 | call ted_but_save_file |
64 | cmp ted_err_save,0 |
||
65 | jne @f |
||
66 | call On_NewFile |
||
67 | @@: |
||
68 | pop edi |
||
69 | ret |
||
1338 | IgorA | 70 | |
4991 | IgorA | 71 | align 4 |
72 | On_SaveAndOpenFile: |
||
73 | push edi |
||
74 | mov edi, tedit0 |
||
75 | |||
76 | call ted_but_save_file |
||
77 | cmp ted_err_save,0 |
||
78 | jne @f |
||
79 | call ted_but_open_file.no_msg |
||
80 | @@: |
||
81 | pop edi |
||
82 | ret |
||
83 | |||
84 | align 4 |
||
85 | On_SaveAndExit: |
||
86 | push edi |
||
87 | mov edi, tedit0 |
||
88 | |||
89 | call ted_but_save_file |
||
90 | cmp ted_err_save,0 |
||
91 | jne @f |
||
92 | mov dword[exit_code],1 |
||
93 | @@: |
||
94 | pop edi |
||
95 | ret |
||
96 | |||
97 | align 4 |
||
98 | On_Exit: |
||
99 | mov dword[exit_code],1 |
||
100 | ret |
||
101 | |||
1457 | IgorA | 102 | ;description: |
2102 | IgorA | 103 | ; функция открытия файла без окна сообщения |
1456 | IgorA | 104 | align 4 |
1457 | IgorA | 105 | but_no_msg_OpenFile: |
106 | push eax ebx |
||
4308 | IgorA | 107 | stdcall [ted_open_file], tedit0,run_file_70,openfile_path |
1457 | IgorA | 108 | call ted_messages_after_open_file |
109 | pop ebx eax |
||
110 | ret |
||
1456 | IgorA | 111 | |
1457 | IgorA | 112 | ;description: |
113 | ; функция открытия файла с возможным окном сообщения (о возможности отменить открытие) |
||
1456 | IgorA | 114 | align 4 |
1457 | IgorA | 115 | ted_but_open_file: |
1467 | IgorA | 116 | pushad |
117 | |||
1457 | IgorA | 118 | stdcall [ted_can_save], tedit0 |
119 | cmp al,1 |
||
120 | jne @f |
||
4991 | IgorA | 121 | stdcall [mb_create],msgbox_2,thread ;message: save changes in file? |
122 | stdcall [mb_setfunctions],msgbox_2O_funct |
||
1457 | IgorA | 123 | jmp .ret_f |
3366 | IgorA | 124 | .no_msg: ;метка для вызова функции через кнопку в сообщении msgbox_5 |
125 | pushad |
||
1457 | IgorA | 126 | @@: |
1467 | IgorA | 127 | |
1468 | IgorA | 128 | copy_path open_dialog_name,communication_area_default_path,file_name,0 |
1467 | IgorA | 129 | mov [OpenDialog_data.type],0 |
1592 | IgorA | 130 | stdcall [OpenDialog_Start],OpenDialog_data |
1467 | IgorA | 131 | cmp [OpenDialog_data.status],2 |
132 | jne @f |
||
1468 | IgorA | 133 | stdcall mem_spac, msgbox_9.fdp,100 |
134 | mov esi,file_name |
||
135 | call strlen |
||
136 | cmp eax,100 |
||
137 | jle .no_crop |
||
138 | mov eax,100 |
||
139 | .no_crop: |
||
140 | stdcall mem_copy, esi,msgbox_9.fdp,eax |
||
1467 | IgorA | 141 | stdcall [mb_create],msgbox_9,thread ;message: error run 'open file dialog' |
142 | jmp .ret_f |
||
143 | @@: |
||
2817 | IgorA | 144 | cmp [OpenDialog_data.status],1 |
2632 | IgorA | 145 | jne .ret_f |
4308 | IgorA | 146 | stdcall [PathShow_prepare], PathShow_data_1 |
147 | stdcall [PathShow_draw], PathShow_data_1 |
||
148 | |||
149 | ;ищем есть ли файл подсветки для открываемого текстового файла |
||
2817 | IgorA | 150 | mov esi,[OpenDialog_data.openfile_path] |
151 | call strlen |
||
4308 | IgorA | 152 | mov edx,openfile_path |
2855 | IgorA | 153 | add edx,eax |
154 | .f_beg: |
||
155 | cmp byte[edx],'.' |
||
156 | je .found |
||
157 | dec edx |
||
4308 | IgorA | 158 | cmp edx,openfile_path |
2855 | IgorA | 159 | jg .f_beg |
160 | .found: |
||
161 | inc edx ;edx - указатель на расширение открытого файла |
||
162 | |||
163 | mov ebx,synt_auto_open |
||
164 | .cycle_0: |
||
165 | add ebx,32 |
||
166 | stdcall strcmp,ebx,edx ;сравниваем расширение открытого файла со значениями открытыми с ini файла |
||
167 | test eax,eax |
||
168 | jz .ok |
||
169 | add ebx,32 |
||
170 | cmp byte[ebx],0 |
||
171 | jne .cycle_0 |
||
172 | jmp .end_0 |
||
173 | .ok: ;открытие файла подсветки в зависимости от найденного расширения |
||
174 | sub ebx,32 |
||
175 | ;mov ecx,ebx |
||
176 | ;mcall 71,1 |
||
177 | call open_unpac_synt_file |
||
178 | .end_0: |
||
179 | |||
4308 | IgorA | 180 | stdcall [ted_open_file], tedit0,run_file_70,openfile_path |
2817 | IgorA | 181 | call ted_messages_after_open_file |
2855 | IgorA | 182 | |
1457 | IgorA | 183 | .ret_f: |
1467 | IgorA | 184 | popad |
1457 | IgorA | 185 | ret |
1338 | IgorA | 186 | |
2102 | IgorA | 187 | ;description: |
4308 | IgorA | 188 | ; функция сохранения файла с вызовом окна диалога |
189 | align 4 |
||
190 | proc ted_but_save_file |
||
191 | ;*** вызов диалогового окна для сохранения файла |
||
192 | copy_path open_dialog_name,communication_area_default_path,file_name,0 |
||
193 | mov [OpenDialog_data.type],1 |
||
194 | stdcall [OpenDialog_Start],OpenDialog_data |
||
195 | cmp [OpenDialog_data.status],1 ;if status==1 then save |
||
196 | jne .end_save_file |
||
197 | stdcall [PathShow_prepare], PathShow_data_1 |
||
198 | stdcall [ted_save_file],tedit0,run_file_70,openfile_path |
||
199 | .end_save_file: |
||
200 | ret |
||
201 | endp |
||
202 | |||
203 | ;description: |
||
2102 | IgorA | 204 | ; копирование памяти |
1468 | IgorA | 205 | align 4 |
206 | proc mem_copy, source:dword, destination:dword, len:dword |
||
207 | push ecx esi edi |
||
208 | cld |
||
209 | mov esi, dword[source] |
||
210 | mov edi, dword[destination] |
||
211 | mov ecx, dword[len] |
||
212 | rep movsb |
||
213 | pop edi esi ecx |
||
214 | ret |
||
215 | endp |
||
216 | |||
2102 | IgorA | 217 | ;description: |
218 | ; заполнение памяти пробелами |
||
1468 | IgorA | 219 | align 4 |
220 | proc mem_spac, mem:dword, len:dword |
||
221 | push eax ecx edi |
||
222 | cld |
||
223 | mov al,' ' |
||
224 | mov edi, dword[mem] |
||
225 | mov ecx, dword[len] |
||
226 | repne stosb |
||
227 | pop edi ecx eax |
||
228 | ret |
||
229 | endp |
||
230 | |||
1457 | IgorA | 231 | ;input: |
232 | ; eax = код ошибки |
||
233 | ; ebx = колличество прочитанных байт |
||
1456 | IgorA | 234 | align 4 |
1457 | IgorA | 235 | ted_messages_after_open_file: |
2847 | IgorA | 236 | push ecx edi |
1457 | IgorA | 237 | cmp eax,0 |
238 | je @f |
||
239 | cmp eax,6 |
||
240 | je @f |
||
241 | cmp ax,10 |
||
242 | jl .zifra_0_9 |
||
243 | mov al,'?' |
||
244 | sub ax,48 |
||
245 | .zifra_0_9: |
||
246 | add ax,48 |
||
1456 | IgorA | 247 | |
1457 | IgorA | 248 | mov byte[msgbox_4.err],al |
249 | stdcall [mb_create],msgbox_4,thread ;message: Can-t open text file! |
||
250 | jmp .ret_f |
||
251 | @@: |
||
252 | cmp ebx,-1 |
||
253 | je .ret_f |
||
254 | ;if open file |
||
2847 | IgorA | 255 | mov edi,tedit0 |
1457 | IgorA | 256 | mov ecx,ted_max_chars |
257 | sub ecx,2 ;ecx = максимальное число байт, для которых была выделена память |
||
258 | cmp ebx,ecx |
||
259 | jl .ret_f |
||
260 | stdcall [mb_create],msgbox_1,thread |
||
261 | .ret_f: |
||
4308 | IgorA | 262 | stdcall [PathShow_prepare], PathShow_data_1 |
2847 | IgorA | 263 | pop edi ecx |
1457 | IgorA | 264 | ret |
1338 | IgorA | 265 | |
1456 | IgorA | 266 | align 4 |
1457 | IgorA | 267 | ted_save_err_msg: |
268 | mov byte[msgbox_6.err],al |
||
269 | stdcall [mb_create],msgbox_6,thread ;message: Can-t save text file! |
||
270 | ret |
||
1456 | IgorA | 271 | |
2102 | IgorA | 272 | ;description: |
273 | ; функция нажатия на кнопку [Применить] в панели синтаксиса |
||
1456 | IgorA | 274 | align 4 |
2707 | IgorA | 275 | proc ted_but_open_syntax uses eax ebx ecx edi, edit:dword |
276 | mov edi,dword[edit] |
||
277 | cmp ted_panel_id,TED_PANEL_SYNTAX |
||
278 | jne @f |
||
279 | stdcall dword[tl_node_get_data], tree1 |
||
280 | pop dword[fn_col_option] |
||
281 | mov ebx,dword[fn_col_option] |
||
2708 | IgorA | 282 | call open_unpac_synt_file |
283 | cmp ebx,-1 |
||
284 | je @f |
||
285 | |||
2707 | IgorA | 286 | call [ted_text_colored] |
287 | stdcall [ted_draw],edi |
||
288 | @@: |
||
289 | ret |
||
1456 | IgorA | 290 | endp |
1338 | IgorA | 291 | |
2708 | IgorA | 292 | ;открытие и распаковка файла подсветки синтаксиса |
2855 | IgorA | 293 | ;input: |
294 | ; ebx - указатель на имя открываемого файла синтаксиса (без пути и папки info) |
||
2708 | IgorA | 295 | ;output: |
296 | ; ebx - число прочитанных байт из файла |
||
2855 | IgorA | 297 | ; ecx - разрушается |
2708 | IgorA | 298 | align 4 |
299 | open_unpac_synt_file: |
||
300 | push eax edi esi |
||
2855 | IgorA | 301 | mov edi,last_open_synt_file |
302 | stdcall strcmp,ebx,edi ;сравниваем имя подключенного файла с подключенным ранее файлом |
||
303 | test eax,eax |
||
304 | jz @f |
||
305 | |||
306 | ;копируем имя подключенного файла (для избежания повторных подключений) |
||
307 | mov esi,ebx |
||
308 | mov ecx,32 |
||
309 | cld |
||
310 | rep movsb |
||
311 | |||
4308 | IgorA | 312 | copy_path ebx,fn_syntax_dir,syntax_path,0 |
313 | copy_path syntax_path,sys_path,file_name,0 |
||
2708 | IgorA | 314 | mov edi, tedit0 |
315 | mov [run_file_70.Function], 0 |
||
316 | mov [run_file_70.Position], 0 |
||
317 | mov [run_file_70.Flags], 0 |
||
318 | mov ecx, ted_syntax_file_size |
||
319 | mov dword[run_file_70.Count], ecx |
||
320 | m2m dword[run_file_70.Buffer], ted_syntax_file |
||
321 | mov byte[run_file_70+20], 0 |
||
322 | mov [run_file_70.FileName], file_name |
||
323 | mcall 70, run_file_70 |
||
324 | cmp ebx,-1 |
||
325 | jne .end_0 |
||
326 | call ted_on_init_synt_err |
||
327 | jmp @f |
||
328 | .end_0: |
||
329 | mov eax,ted_syntax_file |
||
330 | cmp dword[eax],'KPCK' |
||
331 | jne .end_unpack |
||
332 | cmp dword[eax+4],ecx |
||
333 | jg @f ;если для распакованого файла не хватает выделенной памяти |
||
334 | cmp dword[unpac_mem],0 |
||
335 | jne .end_1 |
||
336 | ;выделение памяти для распаковки файла |
||
337 | stdcall mem.Alloc,ecx |
||
338 | mov [unpac_mem],eax |
||
339 | .end_1: |
||
340 | stdcall unpack,ted_syntax_file,[unpac_mem] |
||
341 | mov edi,ted_syntax_file |
||
342 | mov esi,[unpac_mem] |
||
343 | mov ecx,[edi+4] |
||
344 | cld |
||
345 | rep movsb |
||
346 | .end_unpack: |
||
347 | stdcall [ted_init_syntax_file], tedit0 |
||
348 | @@: |
||
349 | pop esi edi eax |
||
350 | ret |
||
351 | |||
2102 | IgorA | 352 | ;description: |
353 | ; вызов/скрытие панели поиска |
||
1456 | IgorA | 354 | align 4 |
4308 | IgorA | 355 | proc ted_but_find uses edi |
356 | mov edi,tedit0 |
||
1456 | IgorA | 357 | |
4308 | IgorA | 358 | cmp ted_panel_id,TED_PANEL_NULL |
359 | je @f |
||
360 | mov ted_panel_id,TED_PANEL_NULL |
||
361 | mov ted_wnd_l,0 |
||
362 | jmp .e_if |
||
363 | @@: |
||
364 | mov ted_panel_id,TED_PANEL_FIND |
||
365 | mov ted_wnd_l,TED_PANEL_WIDTH |
||
366 | .e_if: |
||
367 | call EvSize |
||
368 | stdcall [ted_draw],edi |
||
369 | ret |
||
1449 | IgorA | 370 | endp |
1338 | IgorA | 371 | |
1456 | IgorA | 372 | align 4 |
4308 | IgorA | 373 | tbl_1251_866: |
374 | rb 128 |
||
375 | db 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0 ;128 |
||
376 | db 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0 ;144 |
||
377 | db 0, 0, 0, 0, 0, 0, 0, 0,240,0,0,0,0,0,0,0 ;160 |
||
378 | db 0, 0, 0, 0, 0, 0, 0, 0,241,0,0,0,0,0,0,0 ;176 |
||
379 | db 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 ;192 |
||
380 | db 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 ;208 |
||
381 | db 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 ;224 |
||
382 | db 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 ;240 |
||
383 | |||
384 | align 4 |
||
385 | tbl_866_1251: |
||
386 | rb 128 |
||
387 | db 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 ;128 |
||
388 | db 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 ;144 |
||
389 | db 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 ;160 |
||
390 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;176 |
||
391 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;192 |
||
392 | db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;208 |
||
393 | db 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 ;224 |
||
394 | db 168,184,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;240 |
||
395 | |||
396 | align 4 |
||
1457 | IgorA | 397 | ted_on_find_err: |
398 | stdcall [mb_create],msgbox_7,thread ;message: Can not find text |
||
399 | ret |
||
400 | |||
2102 | IgorA | 401 | ;description: |
402 | ; кнопка [Заменить] на панели |
||
1457 | IgorA | 403 | align 4 |
1338 | IgorA | 404 | but_replace: |
2102 | IgorA | 405 | ; пока не сделано |
406 | ret |
||
1338 | IgorA | 407 | |
2102 | IgorA | 408 | ;description: |
409 | ; функция поиска информации в списке ключевых слов |
||
1456 | IgorA | 410 | align 4 |
1338 | IgorA | 411 | but_find_key_w: |
3244 | IgorA | 412 | cmp byte[wnd_k_words_run],0 |
413 | jne @f |
||
414 | pushad |
||
415 | mcall 51,1,prop_start,thread_coords |
||
416 | popad |
||
417 | @@: |
||
2102 | IgorA | 418 | ret |
1338 | IgorA | 419 | |
2102 | IgorA | 420 | ;description: |
421 | ; выделение/скрытие непечатаемых символов |
||
1456 | IgorA | 422 | align 4 |
423 | proc but_sumb_invis, edit:dword |
||
424 | push edi |
||
425 | mov edi,dword[edit] |
||
1338 | IgorA | 426 | |
1456 | IgorA | 427 | xor ted_mode_invis,1 |
428 | call draw_but_toolbar |
||
1457 | IgorA | 429 | stdcall [ted_draw],edi |
1456 | IgorA | 430 | pop edi |
431 | ret |
||
432 | endp |
||
1338 | IgorA | 433 | |
2102 | IgorA | 434 | ;description: |
435 | ; выделение/скрытие ключевых слов |
||
1456 | IgorA | 436 | align 4 |
437 | proc but_k_words_show, edit:dword |
||
438 | push edi |
||
439 | mov edi,dword[edit] |
||
1338 | IgorA | 440 | |
1456 | IgorA | 441 | xor ted_mode_color,1 |
442 | cmp ted_mode_color,0 |
||
443 | je @f |
||
1457 | IgorA | 444 | call [ted_text_colored] |
1456 | IgorA | 445 | @@: |
1338 | IgorA | 446 | call draw_but_toolbar |
1457 | IgorA | 447 | stdcall [ted_draw],edi |
1456 | IgorA | 448 | pop edi |
1338 | IgorA | 449 | ret |
1456 | IgorA | 450 | endp |
1338 | IgorA | 451 | |
2102 | IgorA | 452 | ;description: |
453 | ; вызов/скрытие панели с файлами синтаксиса |
||
1456 | IgorA | 454 | align 4 |
1449 | IgorA | 455 | proc but_synt_show, edit:dword |
456 | push edi |
||
457 | mov edi,[edit] |
||
458 | |||
1457 | IgorA | 459 | cmp ted_panel_id,TED_PANEL_NULL |
1338 | IgorA | 460 | je @f |
1457 | IgorA | 461 | mov ted_panel_id,TED_PANEL_NULL |
1449 | IgorA | 462 | mov ted_wnd_l,0 |
1338 | IgorA | 463 | jmp .e_if |
464 | @@: |
||
1457 | IgorA | 465 | mov ted_panel_id,TED_PANEL_SYNTAX |
466 | mov ted_wnd_l,TED_PANEL_WIDTH |
||
1338 | IgorA | 467 | .e_if: |
2125 | IgorA | 468 | call EvSize |
1457 | IgorA | 469 | stdcall [ted_draw],edi |
1449 | IgorA | 470 | pop edi |
471 | ret |
||
472 | endp |