Subversion Repositories Kolibri OS

Rev

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