Subversion Repositories Kolibri OS

Rev

Rev 7861 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1476 IgorA 1
use32
7575 IgorA 2
  org 0
1476 IgorA 3
  db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
7575 IgorA 4
  dd 1, start, i_end, mem, stacktop, file_name, sys_path
1476 IgorA 5
 
6
MAX_COLOR_WORD_LEN equ 40
2819 IgorA 7
BUF_SIZE equ 4096 ;buffer for copy|paste
2086 IgorA 8
CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем
1476 IgorA 9
 
10
include '../../macros.inc'
11
include '../../proc32.inc'
7575 IgorA 12
include '../../KOSfuncs.inc'
13
include '../../load_img.inc'
8442 IgorA 14
include '../../load_lib.mac'
1476 IgorA 15
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
7575 IgorA 16
include '../../system/skincfg/trunk/kglobals.inc'
17
include '../../system/skincfg/trunk/unpacker.inc'
1476 IgorA 18
include 'te_data.inc'
19
include 'te_work.inc' ;text work functions
20
 
8442 IgorA 21
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
1476 IgorA 22
 
4990 IgorA 23
icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
24
 
1476 IgorA 25
align 4
26
start:
7575 IgorA 27
	mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
1476 IgorA 28
 
7575 IgorA 29
	mcall SF_SYS_MISC,SSF_HEAP_INIT
2819 IgorA 30
	or eax,eax
31
	jz button.exit
1476 IgorA 32
 
7575 IgorA 33
	mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code
34
	mcall SF_SET_EVENTS_MASK,0xC0000027
1476 IgorA 35
 
7575 IgorA 36
	load_libraries l_libs_start,load_lib_end
1476 IgorA 37
 
7575 IgorA 38
	;проверка на сколько удачно загузилась библиотека
39
	cmp dword[lib0+ll_struc_size-4],0
5911 IgorA 40
	jz @f
41
		mcall -1 ;exit not correct
42
	@@:
1476 IgorA 43
 
44
;---------------------------------------------------------------------
7575 IgorA 45
	stdcall [tl_data_init], tree1
1476 IgorA 46
 
4990 IgorA 47
; читаем файл с курсорами и линиями
7575 IgorA 48
	include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys
49
	mov eax,[icon_tl_sys]
50
	mov [tree1.data_img_sys],eax
1476 IgorA 51
;---------------------------------------------------------------------
52
; читаем bmp файл с иконками узлов
7575 IgorA 53
	include_image_file '..\t_edit\tl_nod_16.png', icon_tl_sys
54
	mov eax,[icon_tl_sys]
55
	mov [tree1.data_img],eax
1476 IgorA 56
;------------------------------------------------------------------------------
7575 IgorA 57
	copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса
58
	mcall SF_FILE,tree_file_struct
1476 IgorA 59
 
7861 IgorA 60
	cmp ebx,2
61
	jg @f
62
		notify_window_run file_name ;сообщение если не удалось открыть файлы
63
		jmp .end_dir_init
64
	@@:
65
	;cmp ebx,0
66
	;jle .end_dir_init
7577 IgorA 67
		mov eax,dir_mem+32+40
7575 IgorA 68
		mov ecx,ebx
69
		@@:
70
			cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
71
			je .filter
72
			stdcall [tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой
73
			stdcall [tl_cur_next],tree1
74
		.filter:
75
			add eax,304
76
		loop @b
77
		stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка
78
		or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка
79
	.end_dir_init:
1476 IgorA 80
 
7577 IgorA 81
	xor eax,eax
82
	inc eax
83
	mov [scrol_w1.type],eax
84
	mov [scrol_h1.type],eax
85
	mov [ws_dir_lbox.type],eax
86
 
1476 IgorA 87
;--- load color option file ---
88
stdcall [ted_init], tedit0
2086 IgorA 89
mov byte[file_name],0
1476 IgorA 90
 
91
align 4
92
red_win:
2086 IgorA 93
	call draw_window
1476 IgorA 94
 
95
align 4
96
still:
7575 IgorA 97
  mcall SF_WAIT_EVENT
1476 IgorA 98
 
99
  cmp al,1 ;изм. положение окна
100
  jz red_win
101
  cmp al,2
102
  jz key
103
  cmp al,3
104
  jz button
105
  cmp al,6
106
  jz mouse
107
 
108
  jmp still
109
 
110
 
111
align 4
2086 IgorA 112
draw_window:
113
	pushad
7575 IgorA 114
	mcall SF_REDRAW,SSF_BEGIN_DRAW
2086 IgorA 115
 
116
	mov edx,[sc.work]
117
	or  edx,0x33000000
118
	mov edi,hed
7575 IgorA 119
	mcall SF_CREATE_WINDOW,<10,555>,<10,333>
2086 IgorA 120
 
7575 IgorA 121
	mcall SF_THREAD_INFO,procinfo,-1
122
	mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t
123
	call EvSize
2086 IgorA 124
 
125
	mov esi,[sc.work_button];0xd0
7575 IgorA 126
	mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200
2086 IgorA 127
 
128
	mov ebx,100*65536+85
129
	mov ecx,195*65536+20
130
	mov edx,201
131
	mov esi,0xd00000
132
	mcall
133
 
134
	mov ecx,[sc.work_button_text]
135
	or  ecx,0x80000000
7575 IgorA 136
	mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f
2086 IgorA 137
 
138
	mov ecx,0xffff00
139
	or  ecx,0x80000000
7575 IgorA 140
	mcall ,105*65536+200,,txt_save_f
2086 IgorA 141
 
142
	mov ecx,[sc.work_text]
143
	or  ecx,0x80000000
7575 IgorA 144
	mcall ,195*65536+10,,txt_inp_file
2086 IgorA 145
 
146
	add ebx,20
147
	mov edx,txt_out_file
148
	int 0x40
149
 
7577 IgorA 150
	stdcall [PathShow_draw], PathShow_data_1
2125 IgorA 151
 
7577 IgorA 152
	stdcall [edit_box_draw], edit1
153
	stdcall [tl_draw], tree1
2086 IgorA 154
 
155
	;scroll 1
156
	mov [ws_dir_lbox.all_redraw],1
7577 IgorA 157
	stdcall [scrollbar_ver_draw],ws_dir_lbox
2086 IgorA 158
	stdcall [ted_draw], tedit0
159
 
7575 IgorA 160
	mcall SF_REDRAW,SSF_END_DRAW
2086 IgorA 161
	popad
162
	ret
163
 
7575 IgorA 164
MIN_M_WND_H equ 100 ;минимальная высота главного окна
165
;input:
166
; edi = pointer to tedit struct
2086 IgorA 167
align 4
7575 IgorA 168
EvSize:
169
	pushad
170
	mov ebx,ted_scr_h
171
	mov esi,ted_scr_w
172
 
173
	m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна
174
	mov eax,ted_wnd_l
175
	sub ted_wnd_w,eax ;отнимаем отступ слева
176
	movzx eax,word[esi+sb_offs_size_x]
177
	sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга
178
 
179
	m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна
180
	cmp ted_wnd_h,MIN_M_WND_H
181
	jg @f
182
		mov ted_wnd_h,MIN_M_WND_H
183
	@@:
184
 
185
	movzx eax,word[ebx+sb_offs_size_y]
186
	sub ted_wnd_h,eax	      ;отнимаем высоту гориз. скроллинга
187
	mov eax,ted_wnd_t
188
	sub ted_wnd_h,eax	      ;отнимаем отступ сверху
189
 
190
	stdcall [ted_init_scroll_bars], tedit0,2
191
	popad
192
	ret
193
 
194
align 4
1476 IgorA 195
mouse:
196
	stdcall [tl_mouse],tree1
197
	stdcall [edit_box_mouse],edit1
198
	stdcall [ted_mouse], tedit0
199
	jmp still
200
 
2819 IgorA 201
;output:
202
; ah = symbol
203
align 4
204
proc KeyConvertToASCII, table:dword
205
	push ebx
206
	mov ebx,dword[table] ;convert scan to ascii
7579 IgorA 207
	shr ax,8
2819 IgorA 208
	add bx,ax
209
	mov ah,byte[ebx]
210
	pop ebx
211
	ret
212
endp
1476 IgorA 213
 
214
align 4
215
key:
7575 IgorA 216
	mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш
2819 IgorA 217
	xor esi,esi
218
	mov ecx,1
7575 IgorA 219
	test al,3 ;[Shift]
2819 IgorA 220
	jz @f
221
		mov cl,2
222
		or esi,KM_SHIFT
223
	@@:
224
	test al,0x0c ;[Ctrl]
225
	jz @f
226
		or esi,KM_CTRL
227
	@@:
228
	test al,0x30 ;[Alt]
229
	jz @f
230
		mov cl,3
231
		or esi,KM_ALT
232
	@@:
233
	test al,0x80 ;[NumLock]
234
	jz @f
235
		or esi,KM_NUMLOCK
236
	@@:
237
 
7575 IgorA 238
	mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры
239
	mcall SF_GET_KEY
1476 IgorA 240
	stdcall [tl_key],tree1
2819 IgorA 241
 
242
	test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим
243
	je @f
244
		cmp ah,0x80 ;if key up
245
		ja still
246
		cmp ah,42 ;[Shift] (left)
247
		je still
248
		cmp ah,54 ;[Shift] (right)
249
		je still
250
		cmp ah,56 ;[Alt]
251
		je still
252
		cmp ah,29 ;[Ctrl]
253
		je still
254
		cmp ah,69 ;[Pause Break]
255
		je still
256
 
7575 IgorA 257
		stdcall KeyConvertToASCII, conv_tabl
2819 IgorA 258
		stdcall [edit_box_key],edit1
259
		jmp still
260
	@@:
261
 
262
	stdcall [ted_key], tedit0, conv_tabl,esi
1476 IgorA 263
	jmp still
264
 
265
align 4
266
button:
7575 IgorA 267
	mcall SF_GET_BUTTON
1476 IgorA 268
 
7575 IgorA 269
	cmp ah,200
270
	jne @f
271
		call but_OpenSyntax
272
	@@:
273
	cmp ah,201
274
	jne @f
275
		call but_SaveSyntax
276
	@@:
1476 IgorA 277
 
7575 IgorA 278
	cmp ah,1
279
	jne still
1476 IgorA 280
.exit:
7575 IgorA 281
	stdcall mem.Free,[options_file]
282
	stdcall mem.Free,[unpac_mem]
1476 IgorA 283
 
7575 IgorA 284
	stdcall [tl_data_clear], tree1
285
	stdcall [ted_delete], tedit0
286
	mcall SF_TERMINATE_PROCESS ;выход из программы
1476 IgorA 287
 
288
align 4
289
but_OpenSyntax:
5911 IgorA 290
push eax
291
	stdcall [tl_node_get_data],tree1
292
	mov [fn_col_option],eax
293
	call InitColText
294
pop eax
295
	ret
1476 IgorA 296
 
297
align 4
298
but_SaveSyntax:
4990 IgorA 299
	stdcall [ted_save_file], tedit0,run_file_70,[edit1.text]
1476 IgorA 300
	ret
301
 
7579 IgorA 302
;description:
303
; функция вызываемую при нажатии Ctrl+N,O,F,S,H,G
1476 IgorA 304
align 4
7579 IgorA 305
proc ted_but_ctrl_all uses eax, opt_key:dword
306
	mov eax,[opt_key]
307
	cmp al,'N' ;Ctrl+N
308
	jne @f
309
		call but_ctrl_n
310
		jmp .end0
311
	@@:
312
	cmp al,'O' ;Ctrl+O
313
	jne @f
314
		call but_ctrl_o
315
	@@:
316
	;cmp al,'S' ;Ctrl+S
317
	;cmp al,'F' ;Ctrl+F
318
	;cmp al,'G' ;Ctrl+G
319
	;cmp al,'H' ;Ctrl+H
320
	.end0:
321
	ret
322
endp
323
 
324
align 4
1476 IgorA 325
but_ctrl_o:
326
	push eax
327
	call get_wnd_in_focus
8442 IgorA 328
	or eax,eax
329
	jz @f
1476 IgorA 330
		stdcall [ted_open_file], eax,str_file_70,[edit1.text]
331
	@@:
332
	pop eax
333
	ret
334
 
335
;создание нового файла
336
align 4
337
but_ctrl_n:
338
	push eax
339
	call get_wnd_in_focus
8442 IgorA 340
	or eax,eax
341
	jz @f
1476 IgorA 342
		stdcall [ted_clear], eax,1
343
		stdcall [ted_draw], eax
344
	@@:
345
	pop eax
346
	ret
347
 
348
;определяем какое из окон редактора в фокусе
349
align 4
350
get_wnd_in_focus:
351
	xor eax,eax
352
	cmp dword[el_focus],tedit0
353
	jne @f
354
		mov eax,tedit0
355
	@@:
356
	;cmp dword[el_focus],tedit1
357
	;jne @f
358
	;       mov eax,tedit1
359
	;@@:
360
	ret
361
 
8442 IgorA 362
hed db 'TextEditor syntax file converter 18.12.20',0 ;подпись окна
2819 IgorA 363
conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код
1476 IgorA 364
 
7575 IgorA 365
txt_load_f db 'Загр. файл',0
366
txt_save_f db 'Сохр. файл',0
2086 IgorA 367
txt_inp_file db 'Исх. файл:',0
1476 IgorA 368
txt_out_file db 'Вых. файл:',0
369
 
370
;library structures
371
l_libs_start:
8442 IgorA 372
	lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib
373
	lib1 l_libs lib_name_1, file_name, system_dir_1, import_libimg
1476 IgorA 374
load_lib_end:
375
 
7575 IgorA 376
IncludeIGlobals
1476 IgorA 377
 
5911 IgorA 378
align 16
1476 IgorA 379
i_end:
7575 IgorA 380
IncludeUGlobals
1476 IgorA 381
	procinfo process_information
8442 IgorA 382
	rb 1024
383
thread:
384
	rb 1024
1476 IgorA 385
stacktop:
8442 IgorA 386
	sys_path rb 4096
387
	file_name rb 4096
388
	file_name_rez rb 4096
1476 IgorA 389
mem: