Subversion Repositories Kolibri OS

Rev

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