Subversion Repositories Kolibri OS

Rev

Rev 2817 | Rev 2855 | 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:
30
	mov byte[msgbox_3.err],al
31
	stdcall [mb_create],msgbox_3,thread ;message: Can-t open color options file!
32
	ret
33
 
34
 
35
align 4
36
ted_but_new_file:
37
  push eax ebx
38
  stdcall [ted_can_save], tedit0
1338 IgorA 39
  cmp al,1
40
  jne @f
1456 IgorA 41
    stdcall [mb_create],msgbox_2,thread ;message: save changes in file?
1338 IgorA 42
    ;mov eax,5
43
    ;mov ebx,50
44
    ;int 0x40
1456 IgorA 45
    stdcall [mb_setfunctions],msgbox_2_funct
1338 IgorA 46
    jmp .ret_f
47
  @@:
48
  call On_NewFile
49
  .ret_f:
50
  pop ebx eax
51
  ret
52
 
1456 IgorA 53
align 4
1338 IgorA 54
On_NewFile:
1457 IgorA 55
  stdcall [ted_clear], tedit0,1
1338 IgorA 56
  call draw_but_toolbar
1457 IgorA 57
  stdcall [ted_draw], tedit0
1338 IgorA 58
  ret
59
 
1456 IgorA 60
align 4
1338 IgorA 61
On_SaveAndNewFile:
1456 IgorA 62
  push edi
63
  mov edi, tedit0
64
 
1457 IgorA 65
  stdcall [ted_but_save_file],edi,run_file_70,[edit1.text]
1456 IgorA 66
  cmp ted_err_save,0
1338 IgorA 67
  jne @f
68
    call On_NewFile
69
  @@:
1456 IgorA 70
  pop edi
1338 IgorA 71
  ret
72
 
1457 IgorA 73
;description:
2102 IgorA 74
; функция открытия файла без окна сообщения
1456 IgorA 75
align 4
1457 IgorA 76
but_no_msg_OpenFile:
77
	push eax ebx
78
	stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
79
	call ted_messages_after_open_file
80
	pop ebx eax
81
	ret
1456 IgorA 82
 
1457 IgorA 83
;description:
84
; функция открытия файла с возможным окном сообщения (о возможности отменить открытие)
1456 IgorA 85
align 4
1457 IgorA 86
ted_but_open_file:
1467 IgorA 87
	pushad
88
 
1457 IgorA 89
	stdcall [ted_can_save], tedit0
90
	cmp al,1
91
	jne @f
92
		stdcall [mb_create],msgbox_5,thread ;message: save changes in file?
93
		stdcall [mb_setfunctions],msgbox_5_funct
94
		jmp .ret_f
95
	@@:
1467 IgorA 96
 
1468 IgorA 97
	copy_path open_dialog_name,communication_area_default_path,file_name,0
1467 IgorA 98
	mov [OpenDialog_data.type],0
1592 IgorA 99
	stdcall [OpenDialog_Start],OpenDialog_data
1467 IgorA 100
	cmp [OpenDialog_data.status],2
101
	jne @f
1468 IgorA 102
		stdcall mem_spac, msgbox_9.fdp,100
103
		mov esi,file_name
104
		call strlen
105
		cmp eax,100
106
		jle .no_crop
107
			mov eax,100
108
		.no_crop:
109
		stdcall mem_copy, esi,msgbox_9.fdp,eax
1467 IgorA 110
		stdcall [mb_create],msgbox_9,thread ;message: error run 'open file dialog'
111
		jmp .ret_f
112
	@@:
2817 IgorA 113
	cmp [OpenDialog_data.status],1
2632 IgorA 114
	jne .ret_f
2817 IgorA 115
		mov esi,[OpenDialog_data.openfile_path]
116
		call strlen
117
		mov [edit1.size],eax
118
		mov [edit1.pos],eax
119
		stdcall [edit_box_draw], edit1
120
		stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
121
		call ted_messages_after_open_file
1457 IgorA 122
	.ret_f:
1467 IgorA 123
	popad
1457 IgorA 124
	ret
1338 IgorA 125
 
2102 IgorA 126
;description:
127
; копирование памяти
1468 IgorA 128
align 4
129
proc mem_copy, source:dword, destination:dword, len:dword
130
  push ecx esi edi
131
    cld
132
    mov esi, dword[source]
133
    mov edi, dword[destination]
134
    mov ecx, dword[len]
135
    rep movsb
136
  pop edi esi ecx
137
  ret
138
endp
139
 
2102 IgorA 140
;description:
141
; заполнение памяти пробелами
1468 IgorA 142
align 4
143
proc mem_spac, mem:dword, len:dword
144
  push eax ecx edi
145
    cld
146
    mov al,' '
147
    mov edi, dword[mem]
148
    mov ecx, dword[len]
149
    repne stosb
150
  pop edi ecx eax
151
  ret
152
endp
153
 
1457 IgorA 154
;input:
155
; eax = код ошибки
156
; ebx = колличество прочитанных байт
157
; edi = pointer to tedit struct
1456 IgorA 158
align 4
1457 IgorA 159
ted_messages_after_open_file:
2847 IgorA 160
	push ecx edi
1457 IgorA 161
	cmp eax,0
162
	je @f
163
	cmp eax,6
164
	je @f
165
		cmp ax,10
166
		jl .zifra_0_9
167
			mov al,'?'
168
			sub ax,48
169
		.zifra_0_9:
170
		add ax,48
1456 IgorA 171
 
1457 IgorA 172
		mov byte[msgbox_4.err],al
173
		stdcall [mb_create],msgbox_4,thread ;message: Can-t open text file!
174
		jmp .ret_f
175
	@@:
176
	cmp ebx,-1
177
	je .ret_f
178
		;if open file
2847 IgorA 179
		mov edi,tedit0
1457 IgorA 180
		mov ecx,ted_max_chars
181
		sub ecx,2 ;ecx = максимальное число байт, для которых была выделена память
182
		cmp ebx,ecx
183
		jl .ret_f
184
			stdcall [mb_create],msgbox_1,thread
185
	.ret_f:
2847 IgorA 186
	pop edi ecx
1457 IgorA 187
	ret
1338 IgorA 188
 
1456 IgorA 189
align 4
1457 IgorA 190
ted_save_err_msg:
191
	mov byte[msgbox_6.err],al
192
	stdcall [mb_create],msgbox_6,thread ;message: Can-t save text file!
193
	ret
1456 IgorA 194
 
2102 IgorA 195
;description:
196
; функция нажатия на кнопку [Применить] в панели синтаксиса
1456 IgorA 197
align 4
2707 IgorA 198
proc ted_but_open_syntax uses eax ebx ecx edi, edit:dword
199
	mov edi,dword[edit]
200
	cmp ted_panel_id,TED_PANEL_SYNTAX
201
	jne @f
202
		stdcall dword[tl_node_get_data], tree1
203
		pop dword[fn_col_option]
204
		mov ebx,dword[fn_col_option]
205
		copy_path ebx,fn_syntax_dir,file_name_rez,0x0
206
		copy_path file_name_rez,sys_path,file_name,0x0
1456 IgorA 207
 
2708 IgorA 208
		call open_unpac_synt_file
209
		cmp ebx,-1
210
		je @f
211
 
2707 IgorA 212
		call [ted_text_colored]
213
		stdcall [ted_draw],edi
214
	@@:
215
	ret
1456 IgorA 216
endp
1338 IgorA 217
 
2708 IgorA 218
;открытие и распаковка файла подсветки синтаксиса
219
;output:
220
; ebx - число прочитанных байт из файла
221
align 4
222
open_unpac_synt_file:
223
push eax edi esi
224
	mov edi, tedit0
225
	mov [run_file_70.Function], 0
226
	mov [run_file_70.Position], 0
227
	mov [run_file_70.Flags], 0
228
	mov ecx, ted_syntax_file_size
229
	mov dword[run_file_70.Count], ecx
230
	m2m dword[run_file_70.Buffer], ted_syntax_file
231
	mov byte[run_file_70+20], 0
232
	mov [run_file_70.FileName], file_name
233
	mcall 70, run_file_70
234
	cmp ebx,-1
235
	jne .end_0
236
		call ted_on_init_synt_err
237
		jmp @f
238
	.end_0:
239
		mov eax,ted_syntax_file
240
		cmp dword[eax],'KPCK'
241
		jne .end_unpack
242
		cmp dword[eax+4],ecx
243
		jg @f ;если для распакованого файла не хватает выделенной памяти
244
		cmp dword[unpac_mem],0
245
		jne .end_1
246
			;выделение памяти для распаковки файла
247
			stdcall mem.Alloc,ecx
248
			mov [unpac_mem],eax
249
		.end_1:
250
		stdcall unpack,ted_syntax_file,[unpac_mem]
251
		mov edi,ted_syntax_file
252
		mov esi,[unpac_mem]
253
		mov ecx,[edi+4]
254
		cld
255
		rep movsb
256
		.end_unpack:
257
		stdcall [ted_init_syntax_file], tedit0
258
	@@:
259
pop esi edi eax
260
	ret
261
 
2102 IgorA 262
;description:
263
; вызов/скрытие панели поиска
1456 IgorA 264
align 4
2102 IgorA 265
proc ted_but_find
1456 IgorA 266
  push edi
1457 IgorA 267
  mov edi,tedit0
1456 IgorA 268
 
1457 IgorA 269
  cmp ted_panel_id,TED_PANEL_NULL
1338 IgorA 270
  je @f
1457 IgorA 271
    mov ted_panel_id,TED_PANEL_NULL
1449 IgorA 272
    mov ted_wnd_l,0
1338 IgorA 273
    jmp .e_if
274
  @@:
1457 IgorA 275
    mov ted_panel_id,TED_PANEL_FIND
276
    mov ted_wnd_l,TED_PANEL_WIDTH
1338 IgorA 277
  .e_if:
2125 IgorA 278
  call EvSize
1457 IgorA 279
  stdcall [ted_draw],edi
1449 IgorA 280
  pop edi
281
  ret
282
endp
1338 IgorA 283
 
1456 IgorA 284
align 4
1457 IgorA 285
ted_on_find_err:
286
	stdcall [mb_create],msgbox_7,thread ;message: Can not find text
287
	ret
288
 
2102 IgorA 289
;description:
290
; кнопка [Заменить] на панели
1457 IgorA 291
align 4
1338 IgorA 292
but_replace:
2102 IgorA 293
	; пока не сделано
294
	ret
1338 IgorA 295
 
2102 IgorA 296
;description:
297
; функция поиска информации в списке ключевых слов
1456 IgorA 298
align 4
1338 IgorA 299
but_find_key_w:
2102 IgorA 300
	; пока не сделано
301
	ret
1338 IgorA 302
 
2102 IgorA 303
;description:
304
; выделение/скрытие непечатаемых символов
1456 IgorA 305
align 4
306
proc but_sumb_invis, edit:dword
307
  push edi
308
  mov edi,dword[edit]
1338 IgorA 309
 
1456 IgorA 310
  xor ted_mode_invis,1
311
  call draw_but_toolbar
1457 IgorA 312
  stdcall [ted_draw],edi
1456 IgorA 313
  pop edi
314
  ret
315
endp
1338 IgorA 316
 
2102 IgorA 317
;description:
318
; выделение/скрытие ключевых слов
1456 IgorA 319
align 4
320
proc but_k_words_show, edit:dword
321
  push edi
322
  mov edi,dword[edit]
1338 IgorA 323
 
1456 IgorA 324
  xor ted_mode_color,1
325
  cmp ted_mode_color,0
326
  je @f
1457 IgorA 327
    call [ted_text_colored]
1456 IgorA 328
  @@:
1338 IgorA 329
  call draw_but_toolbar
1457 IgorA 330
  stdcall [ted_draw],edi
1456 IgorA 331
  pop edi
1338 IgorA 332
  ret
1456 IgorA 333
endp
1338 IgorA 334
 
2102 IgorA 335
;description:
336
; вызов/скрытие панели с файлами синтаксиса
1456 IgorA 337
align 4
1449 IgorA 338
proc but_synt_show, edit:dword
339
  push edi
340
  mov edi,[edit]
341
 
1457 IgorA 342
  cmp ted_panel_id,TED_PANEL_NULL
1338 IgorA 343
  je @f
1457 IgorA 344
    mov ted_panel_id,TED_PANEL_NULL
1449 IgorA 345
    mov ted_wnd_l,0
1338 IgorA 346
    jmp .e_if
347
  @@:
1457 IgorA 348
    mov ted_panel_id,TED_PANEL_SYNTAX
349
    mov ted_wnd_l,TED_PANEL_WIDTH
1338 IgorA 350
  .e_if:
2125 IgorA 351
  call EvSize
1457 IgorA 352
  stdcall [ted_draw],edi
1449 IgorA 353
  pop edi
354
  ret
355
endp