Subversion Repositories Kolibri OS

Rev

Rev 6086 | Rev 7035 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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