Subversion Repositories Kolibri OS

Rev

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