Subversion Repositories Kolibri OS

Rev

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