Subversion Repositories Kolibri OS

Rev

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