Subversion Repositories Kolibri OS

Rev

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