Subversion Repositories Kolibri OS

Rev

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